如何实现依赖属性 (WPF .NET)
本文介绍如何通过使用 DependencyProperty 字段来备份公共语言运行时 (CLR) 属性来实现依赖属性。 依赖属性支持多个高级 Windows Presentation Foundation (WPF) 属性系统功能。 这些功能包括样式、数据绑定、继承、动画和默认值。 如果希望定义的属性支持这些功能,请将属性实现为依赖属性。
例
以下示例演示如何通过调用 Register 方法注册依赖属性。 Register
方法返回一个名为 依赖属性标识符的 DependencyProperty 实例。 标识符存储在 static readonly
字段中,并保存依赖属性的名称和特征。
标识符字段必须遵循命名约定 <property name>Property
。 例如,如果使用名称 Location
注册依赖属性,则应将标识符字段命名为 LocationProperty
。 如果未能遵循此命名模式,则 WPF 设计器可能无法正确报告属性,并且属性系统样式应用程序的各个方面可能无法按预期方式运行。
在以下示例中,依赖属性及其 CLR 访问器的 name 为 HasFish
,因此标识符字段命名为 HasFishProperty
。 依赖属性类型 Boolean,注册依赖属性的所有者类型 Aquarium
。
可以为依赖属性指定默认 元数据。 此示例为 HasFish
依赖属性设置 false
的默认值。
public class Aquarium : DependencyObject
{
public static readonly DependencyProperty HasFishProperty =
DependencyProperty.Register(
name: "HasFish",
propertyType: typeof(bool),
ownerType: typeof(Aquarium),
typeMetadata: new FrameworkPropertyMetadata(defaultValue: false));
public bool HasFish
{
get => (bool)GetValue(HasFishProperty);
set => SetValue(HasFishProperty, value);
}
}
Public Class Aquarium
Inherits DependencyObject
Public Shared ReadOnly HasFishProperty As DependencyProperty =
DependencyProperty.Register(
name:="HasFish",
propertyType:=GetType(Boolean),
ownerType:=GetType(Aquarium),
typeMetadata:=New FrameworkPropertyMetadata(defaultValue:=False))
Public Property HasFish As Boolean
Get
Return GetValue(HasFishProperty)
End Get
Set(value As Boolean)
SetValue(HasFishProperty, value)
End Set
End Property
End Class
有关如何以及为什么实现依赖属性(而不只是用私有字段来支持 CLR 属性),请参阅 依赖属性概述。