如何註冊附加屬性 (WPF .NET)
本文將說明如何註冊附加屬性並提供公用存取子,讓您可以透過 Extensible Application Markup Language (XAML) 和程式碼存取附加屬性。 附加屬性可讓任何 XAML 元素上設定額外的屬性/值組,即使元素在其物件模型中未定義這些額外的屬性也一樣。 額外的屬性可全域存取。 附加屬性一般會定義為沒有傳統屬性「包裝函式」的特殊形式相依性屬性。 Windows Presentation Foundation (WPF) 中大部分的附加屬性都是以相依屬性的方式實作。 您可以在任何 DependencyObject 衍生類型上建立相依性屬性。
範例
下列範例示範如何使用 RegisterAttached 方法,將附加屬性註冊為相依性屬性。 提供者類別可以選擇在屬性中繼資料中指定預設值。 如需屬性中繼資料的詳細資訊,請參閱相依性屬性中繼資料。 在此範例中,HasFish
屬性具有 Boolean 實值型別,其預設值設為 false
。
附加屬性的提供者類別必須提供靜態 get/set 存取子方法,並需遵循命名慣例 Get<property name>
和 Set<property name>
。 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