DependencyProperty 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
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
- 继承
- 属性
示例
此示例演示一个基本用法,其中 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 附加属性语言功能,其中包含 DependencyProperty
DependencyObject 上的标识符和属性存储。 有关详细信息,请参阅附加属性概述。
自定义依赖属性
如果希望自定义类型的属性支持值表达式、数据绑定或动画,则应按照以下准则使用依赖属性支持属性:
- 使用 Register 方法注册依赖属性,该方法返回
DependencyProperty
。 这是依赖属性标识符。 应在类中将此对象公开为可访问的静态只读属性。 按照约定,此DependencyProperty
标识符字段的名称应以“Property”结尾。 - 在注册期间,可以为 属性提供 PropertyMetadata ,以进一步定义属性的行为。
- 为 属性提供
get
和set
访问器:这些是属性包装器,将简化所有调用方对属性的访问。
对依赖属性名称的 XAML 引用
通常在 XAML 标记中设置的某些属性使用 DependencyProperty
作为其值。 例如,在 XAML 中设置 Setter.Property 。 若要在 XAML 中设置此类属性,请将依赖属性的名称指定为属性值。
对于 Setter.Property,从中引用依赖属性名称的类型已由 Setter 存在的 Style 的 TargetType 限定。 对于 TargetType 对象的依赖属性,可以使用依赖属性的简单名称指定 Setter.Property 值。 例如,如果你有一个以 Slider 为目标的 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 |
指定一个静态值,该静态值由属性系统使用,而不是 |
方法
GetMetadata(TypeName) |
检索注册到类型的依赖属性的属性元数据值。 指定要从中获取信息的类型作为类型引用。 |
Register(String, TypeName, TypeName, PropertyMetadata) |
使用指定的属性名称、属性类型、所有者类型和属性元数据注册依赖属性。 定义或初始化将拥有已注册依赖属性的 DependencyObject 派生类时,请使用此方法。 |
RegisterAttached(String, TypeName, TypeName, PropertyMetadata) |
使用指定的属性名称、属性类型、所有者类型和属性元数据注册附加依赖属性。 |