說說WPF的依賴屬性


首先,我們先來大概了解一下依賴屬性

什么是依賴屬性:依賴屬性自己沒有值,通過依賴別人(如Binding)來獲得值。

依賴屬性為什么會出現:控件常用字段有限,包裝太多屬性會占用過高內存,造成浪費。所以用依賴屬性,用不着就不用,用得着就用。

怎么聲明依賴屬性:用public static readonly三個修飾符修飾。

怎么聲明實例:使用DependencyProperty.Register方法生成。此方法有三個參數跟四個參數。

怎么操作依賴屬性的值:利用依賴對象(Dependency Object)的GetValue、SetValue方法實現。

現在,我們用代碼來實現一下依賴屬性:

XAML

<Window x:Class="DependecyProperty.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:DependecyProperty"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel>
        <TextBox />
        <TextBox x:Name="testTB"/>
    </StackPanel>
</Window>

  聲明依賴屬性與引用

  public class Student : DependencyObject
    {

        /// <summary>
        /// 聲明依賴屬性
        /// </summary>
        // Using a DependencyProperty as the backing store for NameProperty.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty NamePropertyProperty =
            DependencyProperty.Register("NameProperty", typeof(string), typeof(Student));

    }
引用

public MainWindow()
{
InitializeComponent();
//實例化類
Student stu = new Student();
//給依賴屬性賦值
stu.SetValue(Student.NamePropertyProperty,"dfsdfsd");
//獲取依賴屬性的值
testTB.Text = stu.GetValue(Student.NamePropertyProperty).ToString();
}

運行程序則成功獲取依賴屬性的值。但不能直接在xaml中得到依賴屬性的值?我們可以綁定依賴屬性到文本框上

<Window x:Class="DependecyProperty.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:DependecyProperty"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel>
        <TextBox />
        <!--當依賴屬性改變時,文本框的字符也得到通知,實時改變 -->
        <TextBox x:Name="testTB" Text="{Binding NameProperty,Mode=TwoWay}"/>
    </StackPanel>
</Window>

  在后置代碼處綁定數據

 //實例化類
            Student stu = new Student();
            this.DataContext = stu;

  則成功獲取依賴屬性

可能到此處就有人問了,聲明依賴屬性打這么多字很麻煩,有沒有方便的方法?可以通過打propdp然后按兩次tab鍵,visual studio會自動生成依賴屬性,自動生成的依賴屬性的DependencyProperty.Register

 (可能有觀察力強的人問,新增依賴屬性會產生這么多錯誤嗎?因為途中有多個錯誤信息。其實這些錯誤是我在命名空間中聲明依賴屬性導致的,這是個錯誤的示范,無視即可)

依賴屬性應用於什么場景?

依賴屬性可用於場景不斷變化的場景,比如一個按鈕的文字在不同情況下變化。這種情況我們可以繼承接口INotifyPropertyChanged,然后聲明屬性的變化通知。不過相對依賴屬性來說,它的性能成本高,所以這樣的情況就可以使用依賴屬性。其它類需要使用此依賴屬性的時候 ,也可以借用。一般依賴屬性的應用場景是自定義控件。

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM