WPF依赖属性(Dependency Property)详解
依赖属性(Dependency Property)详解:语法+场景+实例
依赖属性是WPF的核心机制,支撑着绑定、样式、动画等核心功能。对于初学者,理解它的语法规则和应用场景是关键。下面从「基础语法」到「实战场景」逐步讲解,搭配具体代码示例。
一、依赖属性的核心语法(必掌握)
依赖属性的定义有严格的语法规则,必须包含3个核心部分:继承DependencyObject
、注册依赖属性、CLR包装属性。
1. 基础结构(模板代码)
using System.Windows;// 1. 必须继承自DependencyObject(或其子类,如Control、FrameworkElement等)
public class 自定义类 : DependencyObject
{// 2. 声明静态只读的DependencyProperty字段(核心标识)public static readonly DependencyProperty 属性名称Property;// 3. 静态构造函数:注册依赖属性static 自定义类(){属性名称Property = DependencyProperty.Register(name: "属性名称", // ① 属性名称(与CLR属性一致)propertyType: typeof(属性类型), // ② 属性数据类型(如string、int)ownerType: typeof(自定义类), // ③ 所属类类型typeMetadata: new PropertyMetadata(defaultValue: 默认值, // ④ 可选:默认值propertyChangedCallback: 属性变化回调函数, // ⑤ 可选:值变化时触发coerceValueCallback: 值修正回调函数 // ⑥ 可选:值修正(如范围限制)));}// 4. CLR包装属性(供代码访问,类似普通属性)public 属性类型 属性名称{get => (属性类型)GetValue(属性名称Property); // 读取值set => SetValue(属性名称Property, value); // 设置值}// 可选:属性变化回调(当值改变时执行)private static void 属性变化回调函数(DependencyObject d, DependencyPropertyChangedEventArgs e){// d:当前实例(需强转);e:包含旧值和新值自定义类 instance = (自定义类)d;var 旧值 = (属性类型)e.OldValue;var 新值 =