DependencyProperty 类

定义

表示向依赖属性系统注册的依赖属性。 依赖属性支持值表达式、数据绑定、动画和属性更改通知。 有关 DependencyProperty 值如何充当依赖属性的标识符的详细信息,请参阅 依赖属性概述

public ref class DependencyProperty sealed
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DependencyProperty final
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class DependencyProperty
Public NotInheritable Class DependencyProperty
继承
Object Platform::Object IInspectable DependencyProperty
属性

示例

此示例演示一个基本用法,其中 DependencyProperty 将 建立为类的公共静态成员。 这是通过调用 Register 并将返回值存储为 类的成员来完成的。 有关更多示例,请参阅 自定义依赖属性

public class Fish : Control
{
    public static readonly DependencyProperty SpeciesProperty =
    DependencyProperty.Register(
    "Species",
    typeof(String),
    typeof(Fish), null
    );
    public string Species
    {
        get { return (string)GetValue(SpeciesProperty); }
        set { SetValue(SpeciesProperty, (string)value); }
    }
}

此处未显示 (C++/CX) 示例的 Visual C++ 组件扩展,因为它的分解方式必须与 Microsoft .NET 示例完全不同,并且涉及多个不同的代码文件。 请参阅 自定义依赖项属性中的示例。

注解

依赖属性概念在主题依赖 属性概述中详细介绍。

文档中通常将 的 DependencyProperty 实例引用为依赖属性标识符。 标识符提供了一种引用已注册到特定 DependencyObject 所有者类型的依赖属性的方法。 当所有者类型注册属性时,所有者类型会将 DependencyProperty 实例公开为标识符,该标识符是所有者类的静态成员。

所有者 DependencyObject 为依赖属性提供属性存储。 在代码中使用依赖属性时,可以使用 DependencyProperty 标识符作为对属性系统方法(如 SetValue)的调用的输入。 但是,在大多数情况下,通过获取或设置 包装器,获取或设置依赖属性更简单; 依赖项属性概述中介绍了此概念。

DependencyProperty 支持用于填充值的 XAML 属性语法的本机转换,在 Setter 指定其 属性值 时使用该值。 此转换使用 ownerTypeName**.**propertyName 表单作为输入字符串。

注意

一个相关语法,也可用于按名称指定属性,并且是某些数据和动画 API 所必需的 ,是属性路径语法。 属性路径可用于引用具有属性的类的结构和该属性的值。 有关详细信息,请参阅 Property-path 语法

提示

如果使用 Microsoft .NET 语言 (C# 或 Microsoft Visual Basic) 进行编程, 则 TypeName 类型投影为 System.Type。 使用 C# 进行编程时,通常使用 typeof 运算符获取对类型 System.Type 的引用。 在 Microsoft Visual Basic 中,使用 GetType。 如果使用 Visual C++ 组件扩展 (C++/CX) ) ,则需要在其中创建 TypeName 帮助程序结构,则可以使用 typeid 组件扩展

Windows 运行时实现 XAML 附加属性语言功能,其中包含 DependencyPropertyDependencyObject 上的标识符和属性存储。 有关详细信息,请参阅附加属性概述

自定义依赖属性

如果希望自定义类型的属性支持值表达式、数据绑定或动画,则应按照以下准则使用依赖属性支持属性:

  • 使用 Register 方法注册依赖属性,该方法返回 DependencyProperty。 这是依赖属性标识符。 应在类中将此对象公开为可访问的静态只读属性。 按照约定,此 DependencyProperty 标识符字段的名称应以“Property”结尾。
  • 在注册期间,可以为 属性提供 PropertyMetadata ,以进一步定义属性的行为。
  • 为 属性提供 getset 访问器:这些是属性包装器,将简化所有调用方对属性的访问。

对依赖属性名称的 XAML 引用

通常在 XAML 标记中设置的某些属性使用 DependencyProperty 作为其值。 例如,在 XAML 中设置 Setter.Property 。 若要在 XAML 中设置此类属性,请将依赖属性的名称指定为属性值。

对于 Setter.Property,从中引用依赖属性名称的类型已由 Setter 存在的 StyleTargetType 限定。 对于 TargetType 对象的依赖属性,可以使用依赖属性的简单名称指定 Setter.Property 值。 例如,如果你有一个以 Slider 为目标的 Style,并且你想要设置 Orientation 属性的样式,则 Property 属性值只能是“Orientation”。 只要依赖属性来自目标类型的更深层继承中的类,简单名称也起作用。 例如,若要在 SliderStyle 中设置 Visibility 属性的样式,“Visibility”的 Property 属性值将起作用。 在这种情况下, VisibilityUIElement 定义,但继承到 Slider

还可以使用 Setter.Property 引用附加的属性名称。 对于属性值,请使用 AttachedPropertyOwner.AttachedPropertyName 的形式,就像在 XAML 中使用该附加属性设置为属性一样。 例如,下面是一个 Setter,用于在 Style 中设置附加属性 AutomationProperties.ItemType<Setter Property="AutomationProperties.ItemType" Value="Navigation Button"/>

注意

依赖属性的名称不是静态属性标识符的名称 DependencyProperty 。 它是属性注册到的名称字符串,以及 Microsoft IntelliSense 和参考文档公开时Windows 运行时编程中该属性的典型用法名称。 换句话说,你不希望在 XAML 中为 Setter.Property 指定的字符串以“Property” (结尾,除非少数情况下依赖属性实际上包含后缀“Property”) 。

在代码中使用 DependencyProperty (依赖属性标识符)

有几个方法是Windows 运行时属性系统的实用工具方法,它们使用DependencyProperty值作为输入参数。 其中包括:

属性

UnsetValue

指定一个静态值,该静态值由属性系统使用,而不是 null 指示属性存在,但不由属性系统或任何应用代码设置其值。

方法

GetMetadata(TypeName)

检索注册到类型的依赖属性的属性元数据值。 指定要从中获取信息的类型作为类型引用。

Register(String, TypeName, TypeName, PropertyMetadata)

使用指定的属性名称、属性类型、所有者类型和属性元数据注册依赖属性。 定义或初始化将拥有已注册依赖属性的 DependencyObject 派生类时,请使用此方法。

RegisterAttached(String, TypeName, TypeName, PropertyMetadata)

使用指定的属性名称、属性类型、所有者类型和属性元数据注册附加依赖属性。

适用于

另请参阅