依赖属性错误

10

我正在学习依赖属性。我阅读了许多文章和书籍,但仍不清楚。

下面展示的程序是我编写以进行学习的。其中有一些错误,请帮忙解决。我有问题:

  1. 自定义依赖属性元素的主要用途是通知更改吗?
  2. 我在一本WPF教材中找到了一个“IsDefaultProperty”代码,这意味着“IsDefault”属性是一个依赖属性吗?
  3. 为什么他们展示那段代码?这意味着在Button类内部它是如此定义的吗?(他们展示了内部代码?)或者他们展示如何定义为自定义?

这是我的代码:

namespace DependencyProperties
{
    public class Contact
    {
        private int id=100;
        private string name="shri";
        public static readonly DependencyProperty IsPresentProperty;

        public int ID
        {
            get { return id; }
        }
        public string NAME
        {
            get { return name; }
        }

        static Contact()
        {
            IsPresentProperty = DependencyProperty.Register("IsPresent", typeof(bool),typeof(Contact),new FrameworkPropertyMetadata(false,new PropertyChangedCallback(OnIsPresentChanged)));
        }

        public bool Present
        {
            get { return (bool)GetValue(Contact.IsPresentProperty); }
            set { SetValue(Contact.IsPresentProperty, value); }
        }

        private static void OnIsPresentChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
        {  

        }
    }
}

我看到了这个错误:

> Error: GetValue and SetValue does not exist in the current context
2个回答

23

DependencyProperty实例必须在DependencyObject的实例上定义。因此,您的类必须派生自DependencyObject或其子类。WPF中的许多类型都继承自它,包括Button

因此,在这种情况下使您的代码正常工作,您必须使用:

public class Contact : DependencyObject
{
    // ...
这就是为什么你在GetValueSetValue上收到一个错误--它们被定义在DependencyObject上。

18

自定义依赖属性的主要用途是提供更改通知吗?

不是,通过让类实现INotifyPropertyChanged也可以实现这一点。依赖属性提供更改通知,但真正的理由是不同的。请参见为什么使用依赖属性?WPF属性系统如何节约开销?

我在一本WPF教材中找到了一个Button的“IsDefaultProperty”代码。这意味着“IsDefault”属性是依赖属性吗?

是的。“FooBarProperty”命名规则是WPF定义依赖属性的惯例;您可以查看IsDefaultProperty文档以查看它是否确实是依赖属性,甚至IsDefault文档也有一个名为“依赖属性信息”的部分。

为什么他们展示了那段代码?这意味着,在Button类内部,它是这样定义的吗?(他们展示了内部代码?)还是他们展示了如何自定义定义?

我不确定“那个”代码是什么,但是是的,该属性几乎肯定是在Button中定义的(因为我不确定您正在引用什么)。

错误:当前上下文中不存在GetValue和SetValue

那是因为您没有继承DependencyObject


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接