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

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

重要

面向 .NET 7 和 .NET 6 的桌面指南文档正在撰写中。

示例

以下示例演示如何通过调用 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 属性的原因及其实现方式,请参阅依赖属性概述

另请参阅