如何注册附加属性 (WPF .NET)
本文介绍如何注册附加属性并提供公共访问器,以便通过 Extensible Application Markup Language (XAML) 和代码访问附加属性。 附加属性支持对任何 XAML 元素设置额外的属性/值对,即使该元素没有在其对象模型中定义这些额外的属性。 额外的属性可进行全局访问。 附加属性通常定义为没有常规属性包装器的依赖属性的专用形式。 Windows Presentation Foundation (WPF) 类型的大多数附加属性也作为依赖属性实现。 可以在任何 DependencyObject 派生类型上创建依赖属性。
示例
以下示例显示如何使用 RegisterAttached 方法将附加属性注册为依赖属性。 提供程序类可以选择在属性元数据中指定默认值。 有关属性元数据的详细信息,请参阅依赖属性元数据。 在此示例中,HasFish
属性具有 Boolean 值类型,其默认值设置为 false
。
附加属性的提供程序类必须提供遵循命名约定 Get<property name>
和 Set<property name>
的静态 get/set 访问器方法。 XAML 读取器使用访问器识别附加属性的 XAML 特性,并将其值解析为适当的类型。 即使附加属性未注册为依赖属性,这些访问器也是必需的。
public class Aquarium : UIElement
{
// Register an attached dependency property with the specified
// property name, property type, owner type, and property metadata.
public static readonly DependencyProperty HasFishProperty =
DependencyProperty.RegisterAttached(
"HasFish",
typeof(bool),
typeof(Aquarium),
new FrameworkPropertyMetadata(defaultValue: false,
flags: FrameworkPropertyMetadataOptions.AffectsRender)
);
// Declare a get accessor method.
public static bool GetHasFish(UIElement target) =>
(bool)target.GetValue(HasFishProperty);
// Declare a set accessor method.
public static void SetHasFish(UIElement target, bool value) =>
target.SetValue(HasFishProperty, value);
}
Public Class Aquarium
Inherits UIElement
' Register an attached dependency property with the specified
' property name, property type, owner type, and property metadata.
Public Shared ReadOnly HasFishProperty As DependencyProperty =
DependencyProperty.RegisterAttached("HasFish", GetType(Boolean), GetType(Aquarium),
New FrameworkPropertyMetadata(defaultValue:=False,
flags:=FrameworkPropertyMetadataOptions.AffectsRender))
' Declare a get accessor method.
Public Shared Function GetHasFish(target As UIElement) As Boolean
Return target.GetValue(HasFishProperty)
End Function
' Declare a set accessor method.
Public Shared Sub SetHasFish(target As UIElement, value As Boolean)
target.SetValue(HasFishProperty, value)
End Sub
End Class