说说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,然后声明属性的变化通知。不过相对依赖属性来说,它的性能成本高,所以这样的情况就可以使用依赖属性。其它类需要使用此依赖属性的时候 ,也可以借用。一般依赖属性的应用场景是自定义控件。

  

猜你喜欢

转载自www.cnblogs.com/ssvip/p/9184199.html