开发手册 欢迎您!
软件开发者资料库

WPF - 依赖属性

WPF依赖项属性 - 从概述,环境设置,Hello World,XAML概述,元素树,依赖项属性,路由事件,控件,布局,布局嵌套,输入,命令行,数据绑定,资源等简单而简单的步骤学习WPF ,模板,样式,触发器,调试,自定义控件,异常处理,本地化,交互,2D图形,3D图形,多媒体。

在WPF应用程序中,依赖项属性是一种特定类型的属性,它扩展了CLR属性.它利用了WPF属性系统中可用的特定功能.

定义依赖项属性的类必须从 DependencyObject 类继承.在XAML中使用的许多UI控件类都是从 DependencyObject 类派生的,它们支持依赖属性,例如: Button类支持 IsMouseOver 依赖项属性.

以下XAML代码创建一个带有一些属性的按钮.

                                                                                                                                                               

XAML中的x:Type标记扩展具有类似C#中typeof()的功能.当指定属性时使用它来获取对象的类型,例如< Style TargetType ="{x:Type Button}">

当编译并执行上述代码时,你会得到以下 MainWindow .当鼠标悬停在按钮上时,它将改变按钮的前景色.当鼠标离开按钮时,它会变回原来的颜色.

依赖属性

为什么我们需要依赖属性

在您的应用程序中使用它时,依赖属性为您提供各种好处.在以下场景中,依赖属性可用于CLR属性 :

  • 如果要设置样式

  • 如果要数据绑定

  • 如果要使用资源(静态或动态资源)进行设置

  • 如果您想要支持动画

基本上,依赖属性提供了许多使用CLR属性无法获得的功能.

依赖属性与其他 CLR属性之间的主要区别列在下面 :

  • CLR属性可以使用 getter setter 直接从类的私有成员读/写.相反,依赖项属性不存储在本地对象中.

  • 依赖项属性存储在由DependencyObject类提供的键/值对的字典中.它还节省了大量内存,因为它在更改时存储了属性.它也可以绑定在XAML中.

自定义依赖属性

在.NET框架中,也可以定义自定义依赖项属性.按照下面给出的步骤在C#中定义自定义依赖项属性.

  • 声明并注册依赖属性使用系统调用寄存器.

  • 为属性提供 setter getter .

  • 定义静态处理程序,它将处理全局发生的任何变化

  • 定义一个实例处理程序,它将处理该特定实例发生的任何更改.

以下C#代码定义了一个依赖项属性来设置用户控件的 SetText 属性.

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes;  namespace WpfApplication3 {    ///        /// Interaction logic for UserControl1.xaml    ///     public partial class UserControl1 : UserControl {       public UserControl1() {          InitializeComponent();       }      public static readonly DependencyProperty SetTextProperty =          DependencyProperty.Register("SetText", typeof(string), typeof(UserControl1), new             PropertyMetadata("", new PropertyChangedCallback(OnSetTextChanged)));       public string SetText {          get { return (string)GetValue(SetTextProperty); }          set { SetValue(SetTextProperty, value); }       }       private static void OnSetTextChanged(DependencyObject d,         DependencyPropertyChangedEventArgs e) {          UserControl1 UserControl1Control = d as UserControl1;          UserControl1Control.OnSetTextChanged(e);       }       private void OnSetTextChanged(DependencyPropertyChangedEventArgs e) {          tbTest.Text = e.NewValue.ToString();       }     }  }

这是XAML文件,其中TextBlock被定义为用户控件,将通过SetText依赖项属性为其分配Text属性.

以下XAML代码创建用户控件并初始化其 SetText 依赖项属性.

                

让我们运行这个应用程序.您可以立即观察到在我们的MainWindow中,用户控件的依赖项属性已成功用作文本.

用户的依赖属性