9

我正在学习依赖属性。我读了很多帖子和书籍,但我仍然不清楚。

下面显示的程序是我写来学习的。里面有一些错误,请帮忙解决。我有问题。

  1. 自定义 Dependency 属性元素的主要用途是用于通知更改?
  2. 我在 WPF 教科书中找到了Button的“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
4

2 回答 2

21

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

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

public class Contact : DependencyObject
{
    // ...

这就是您收到错误的原因GetValue-SetValue它们是在DependencyObject.

于 2012-05-09T08:49:33.063 回答
18

自定义 Dependency 属性元素的主要用途是用于通知更改?

不,这也可以通过实现类来安排INotifyPropertyChanged。提供更改通知的依赖属性,但真正的理由是不同的。请参阅为什么依赖属性?以及WPF 属性系统如何经济?

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

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

为什么他们显示该代码?这意味着,在内部,在 Button 类中,它是这样定义的?(他们展示了内部代码?)或者他们展示了如何定义为自定义?

我不确定“那个”代码是什么,但是是的,该属性几乎肯定是这样定义的Button(“几乎”,因为我不确定您指的是什么)。

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

那是因为你不是从DependencyObject.

于 2012-05-09T08:49:19.650 回答