如何使标签成为静态标签

本文关键字:标签 静态 何使 | 更新日期: 2023-09-27 18:32:50

所以我有一个程序,我告诉用户两个骨架是否匹配,但问题是我需要通过class访问label。我不断得到的错误是

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中制作标签,或者是否有其他方法可以做到这一点。
提前感谢

如何使标签成为静态标签

我认为您可以使用另一种方法,就像@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; };

这是一个坏主意。不应在多个线程上创建 UI 元素。

您确实应该考虑实现 MVVM 模式。它将使您的代码更加解耦并提高可验证性。

最好的办法是使用内置的 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/