如何实现依赖属性 (WPF .NET)

本文介绍如何通过使用 DependencyProperty 字段来备份公共语言运行时 (CLR) 属性来实现依赖属性。 依赖属性支持多个高级 Windows Presentation Foundation (WPF) 属性系统功能。 这些功能包括样式、数据绑定、继承、动画和默认值。 如果希望定义的属性支持这些功能,请将属性实现为依赖属性。

以下示例演示如何通过调用 Register 方法注册依赖属性。 Register 方法返回一个名为 依赖属性标识符DependencyProperty 实例。 标识符存储在 static readonly 字段中,并保存依赖属性的名称和特征。

标识符字段必须遵循命名约定 <property name>Property。 例如,如果使用名称 Location注册依赖属性,则应将标识符字段命名为 LocationProperty。 如果未能遵循此命名模式,则 WPF 设计器可能无法正确报告属性,并且属性系统样式应用程序的各个方面可能无法按预期方式运行。

在以下示例中,依赖属性及其 CLR 访问器的 nameHasFish,因此标识符字段命名为 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 属性),请参阅 依赖属性概述

另请参阅