依赖属性错误

时间:2012-05-09 08:41:55

标签: .net wpf dependency-properties

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

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

  1. 自定义Dependency属性元素的主要用途是用于更改通知吗?
  2. 我在WPF教科书中找到了按钮的'IsDefaultProperty'代码。这意味着' IsDefault '属性是依赖属性?
  3. 他们为什么要显示该代码?这意味着,在内部,在Button类中,它的定义是什么? (他们展示了内部代码?)或者他们展示了如何定义自定义?
  4. 这是我的代码:

    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 个答案:

答案 0 :(得分:16)

  

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

不,也可以通过让类实现INotifyPropertyChanged来安排。依赖属性提供更改通知,但真正的基本原理是不同的。请参阅Why dependency properties?How is the WPF property system economical?

  

我在WPF教科书中找到了Button的'IsDefaultProperty'代码。它   意味着'IsDefault'属性是一个依赖属性?

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

  

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

我不确定“那个”代码是什么,但是是的,该属性几乎肯定是在Button中定义的(“差不多”因为我不确定你指的是什么)。 / p>

  

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

那是因为你不是来自DependencyObject

答案 1 :(得分:14)

必须在DependencyProperty的实例上定义

DependencyObject个实例。因此,您的类必须派生自DependencyObject或其子类之一。 WPF中的许多类型都源于此,包括Button

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

public class Contact : DependencyObject
{
    // ...

这就是您在GetValueSetValue上收到错误的原因 - 它们是在DependencyObject上定义的。