DependencyProperty 类

定义

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

public ref class DependencyProperty sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 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(Windows.Foundation.UniversalApiContract), 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
See Remarks
继承
Object Platform::Object IInspectable DependencyProperty
属性

Windows 要求

设备系列
Windows 10 (在 10.0.10240.0 中引入)
API contract
Windows.Foundation.UniversalApiContract (在 v1.0 中引入)

示例

此示例演示一个基本用法,其中 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); }
    }
}
Public Class Fish
    Inherits Control

    Public Shared ReadOnly SpeciesProperty As DependencyProperty = _
    DependencyProperty.Register(
    "Species", _
    GetType(String), _
    GetType(Fish), _
    Nothing)
    Public Property Species As String
        Get
            Species = CType(GetValue(SpeciesProperty), String)
        End Get
        Set(value As String)
            SetValue(SpeciesProperty, value)
        End Set
    End Property
End Class

此处未显示 Visual C++ 组件扩展 (C++/CX) 示例,因为它必须完全不同于 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 运行时使用 DependencyProperty 标识符和 DependencyObject 上的属性存储实现 XAML 附加属性语言功能。 有关详细信息,请参阅附加属性概述

自定义依赖属性

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

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

对依赖属性名称的 XAML 引用

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

对于 Setter.Property,引用依赖属性名称的类型已由 Setter 所在的 StyleTargetType 限定。 对于 TargetType 对象上的依赖属性,可以使用依赖属性的简单名称指定 Setter.Property 值。 例如,如果你有一个面向滑块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)

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

适用于

另请参阅