如何使一个静态的标签(How to make a label static)

2019-07-29 04:51发布

所以,我有在我说的是用户进行的两次骨架是否符合程序,但事情是,我需要访问label通过class 。 我不断收到错误

Error1  An object reference is required for the
non-static field, method, or property 
'WpfApplication1.MainWindow.matchLabel'

下面是我在我的代码:

static标签

static Label matching
    {
        get { return matchLabel; } //errors here
        set { matchLabel = value; } //and here
    }

班级

private class Scan
    {
        private void Start()
        {
            Skeleton skeleton = new Skeleton();

            if (PersonDetected == true)
            {
                int SkeletonID2 = skeleton.TrackingId;

                if (SkeletonID1 == SkeletonID2)
                {
                    matching.Content = "Your IDs are Matching!";
                }

                else if (SkeletonID2 != SkeletonID1)
                {
                    matching.Content = "Your IDs don't Match.";
                }
            }
        }

        private void Stop()
        {
            if (PersonDetected == true)
            {
                matching.Content = "Scan Aborted";
            }
        }
    }

基本上我想知道如何使标签在wpf static ,或是否有另一种方式来做到这一点。
提前致谢

Answer 1:

我认为,你可以使用另一种方法,就像@Daniel表示,采用多线程的UI元素是一个坏主意。

如果我的理解是正确的,你只是想从你的域逻辑通知给用户的结果,我会做到这一点很简单,创建一个事件:

public event Action<string> MyEvent = delegate { };

            if (SkeletonID1 == SkeletonID2)
            {
                this.MyEvent("Your IDs are Matching!");
            }

            else if (SkeletonID2 != SkeletonID1)
            {
                this.MyEvent("Your IDs don't Match.");
            }

 if (PersonDetected == true)
            {
                this.MyEvent("Scan Aborted");
            }

在您的WPF视图

this.MydomainComponent.MyEvent += (x) => { this.matchLabel.Content = x; };



Answer 2:

这是一个坏主意。 你不应该创建多个线程的UI元素。

你真的应该考虑实现MVVM模式。 它会使你的代码更加解耦,增加testablility。



Answer 3:

你最好的选择是使用内置的WPF数据绑定。 您可以使用MVVM模式,但这个工作它不是必需的。

窗口类(XAML)

<Window x:Class="WpfApplication2.MyWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MyWindow" Height="300" Width="300">
    <Grid>
        <Label Content="{Binding Path=MyLabelValue}" />
    </Grid>
</Window>

窗口后面的代码(代码)

using System.Windows;
using System.ComponentModel;

namespace WpfApplication2
{
    /// <summary>
    /// Interaction logic for MyWindow.xaml
    /// </summary>
    public partial class MyWindow : Window, INotifyPropertyChanged
    {
        public MyWindow()
        {
            InitializeComponent();

            DataContext = this;  // Sets context of binding to the class 
        }


        // Property for binding
        private string _mylabelvalue;
        public string MyLabelValue
        {
            get { return _mylabelvalue; }
            set 
            { 
                _mylabelvalue = value;
                if(PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("MyLabelValue"));
                }
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }
}

通过使用,当你设置此方法/调用你的标签值窗口上的属性。 当您更改属性 - 更新通过数据绑定和INotifyPropertyChanged接口在UI的价值。 我对通过反射这样做的,在这里用我的博客MVVM模式的部分。

http://tsells.wordpress.com/category/mvvm/



文章来源: How to make a label static