【问题标题】:Dependency property error依赖属性错误
【发布时间】:2012-05-09 08:41:55
【问题描述】:

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

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

  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

【问题讨论】:

    标签: .net wpf dependency-properties


    【解决方案1】:

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

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

    public class Contact : DependencyObject
    {
        // ...
    

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

    【讨论】:

      【解决方案2】:

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

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

      我在 WPF 教科书中找到了 Button 的“IsDefaultProperty”代码。它 表示“IsDefault”属性是依赖属性?

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

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

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

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

      那是因为你不是从DependencyObject派生的。

      【讨论】:

        猜你喜欢
        • 2012-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-07
        • 1970-01-01
        • 1970-01-01
        • 2011-04-26
        相关资源
        最近更新 更多