Dot-Net

依賴屬性錯誤

  • September 10, 2018

我正在學習依賴屬性。我讀了很多文章和書籍,但我仍然不清楚。

下面顯示的程序是我寫來學習的。裡面有一些錯誤,請幫忙解決。我有問題。

  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

自定義 Dependency 屬性元素的主要用途是用於通知更改?

不,這也可以通過實現類來安排INotifyPropertyChanged。提供更改通知的依賴屬性,但真正的理由是不同的。請參閱為什麼依賴屬性?以及WPF 屬性系統如何經濟?

我在 WPF 教科書中找到了 Button 的“IsDefaultProperty”程式碼。這意味著“IsDefault”屬性是依賴屬性嗎?

是的。命名欄位“FooBarProperty”是定義依賴屬性的 WPF 約定;您可以檢查文件IsDefaultProperty以查看它確實是一個依賴屬性,甚至IsDefault文件也有一個名為“依賴屬性資訊”的部分。

為什麼他們顯示該程式碼?這意味著,在內部,在 Button 類中,它是這樣定義的?(他們展示了內部程式碼?)或者他們展示瞭如何定義為自定義?

我不確定“那個”程式碼是什麼,但是是的,該屬性幾乎肯定是這樣定義的Button(“幾乎”,因為我不確定您指的是什麼)。

錯誤:目前上下文中不存在 GetValue 和 SetValue

那是因為你不是從DependencyObject.

DependencyProperty實例必須在 的實例上定義DependencyObject。因此,您的類必須派生自DependencyObject或其子類之一。WPF 中的許多類型都由此派生,包括Button.

因此,要讓您的程式碼在這種情況下工作,您必須使用:

public class Contact : DependencyObject
{
   // ...

這就是您收到錯誤的原因GetValue-SetValue它們是在DependencyObject.

引用自:https://stackoverflow.com/questions/10512629