DependencyProperty 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
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
- 继承
- 属性
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 ,以进一步定义属性的行为。
- 为 属性提供 get 和 set 访问器:这些是属性包装器,将简化所有调用方对属性的访问。
对依赖属性名称的 XAML 引用
一些通常在 XAML 标记中设置的属性使用 DependencyProperty 作为其值。 例如,在 XAML 中设置 Setter.Property 。 若要在 XAML 中设置此类属性,请将依赖属性的名称指定为属性值。
对于 Setter.Property,引用依赖属性名称的类型已由 Setter 所在的 Style 的 TargetType 限定。 对于 TargetType 对象上的依赖属性,可以使用依赖属性的简单名称指定 Setter.Property 值。 例如,如果你有一个面向滑块的 Style,并且你想要设置 Orientation 属性的样式,则 Property 属性值可以只是“Orientation”。 只要依赖属性来自目标类型的更深层继承中的类,简单名称也起作用。 例如,若要在 Slider 的 Style 中设置 Visibility 属性的样式,“Visibility”的 Property 属性值将起作用。 在这种情况下, Visibility 由 UIElement 定义,但继承到 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 值作为输入参数。 其中包括:
- DependencyObject.ClearValue
- DependencyObject.GetAnimationBaseValue
- DependencyObject.GetValue
- DependencyObject.ReadLocalValue
- DependencyObject.SetValue
- DependencyPropertyChangedEventArgs.Property
- Setter (DependencyProperty,Object) 构造函数
属性
UnsetValue |
指定一个静态值,该静态值由属性系统而不是 null 来指示该属性存在,但不由属性系统或任何应用代码设置其值。 |
方法
GetMetadata(TypeName) |
检索注册到类型的依赖属性的属性元数据值。 指定要从中获取信息的类型作为类型引用。 |
Register(String, TypeName, TypeName, PropertyMetadata) |
使用指定的属性名称、属性类型、所有者类型和属性元数据注册依赖属性。 定义或初始化将拥有已注册依赖属性的 DependencyObject 派生类时,请使用此方法。 |
RegisterAttached(String, TypeName, TypeName, PropertyMetadata) |
使用指定的属性名称、属性类型、所有者类型和属性元数据注册附加依赖属性。 |