如何实现依赖属性 (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 属性的原因及其实现方式,请参阅依赖属性概述。