如何實作相依性屬性 (WPF .NET)
本文描述如何使用 DependencyProperty 欄位來支援通用語言執行平台 (CLR) 屬性,以實作相依性屬性。 相依性屬性支援數個進階 Windows Presentation Foundation (WPF) 屬性系統功能。 這些功能包括樣式、資料繫結、繼承、動畫和預設值。 如果您想要所定義的屬性支持這些功能,則請將屬性實作為相依性屬性。
範例
下列範例顯示如何呼叫 Register 方法來註冊相依性屬性。 Register
方法會傳回稱為「相依性屬性識別碼」的 DependencyProperty 執行個體。 識別碼會儲存在 static readonly
欄位中,並保留相依性屬性的名稱和特性。
識別碼欄位必須遵循命名慣例 <property name>Property
。 例如,如果您使用名稱 Location
來註冊相依性屬性,則識別碼欄位應該會命名為 LocationProperty
。 如果您無法遵循此命名模式,則 WPF 設計工具不一定會正確地報告您的屬性,而且屬性系統樣式應用程式的層面可能無法如預期運作。
在下列範例中,相依性屬性的名稱和其 CLR 存取子是 HasFish
,因此識別碼欄位會命名為 HasFishProperty
。 相依性屬性類型是 Boolean,而可註冊相依性屬性的擁有者類型是 Aquarium
。
您可以指定相依性屬性的預設中繼資料。 此範例設定 HasFish
相依性屬性的預設值 false
。
public class Aquarium : DependencyObject
{
public static readonly DependencyProperty HasFishProperty =
DependencyProperty.Register(
name: "HasFish",
propertyType: typeof(bool),
ownerType: typeof(Aquarium),
typeMetadata: new FrameworkPropertyMetadata(defaultValue: false));
public bool HasFish
{
get => (bool)GetValue(HasFishProperty);
set => SetValue(HasFishProperty, value);
}
}
Public Class Aquarium
Inherits DependencyObject
Public Shared ReadOnly HasFishProperty As DependencyProperty =
DependencyProperty.Register(
name:="HasFish",
propertyType:=GetType(Boolean),
ownerType:=GetType(Aquarium),
typeMetadata:=New FrameworkPropertyMetadata(defaultValue:=False))
Public Property HasFish As Boolean
Get
Return GetValue(HasFishProperty)
End Get
Set(value As Boolean)
SetValue(HasFishProperty, value)
End Set
End Property
End Class
如需相依性屬性實作方式和原因的詳細資訊,而不只是支援具有私人欄位的 CLR 屬性的詳細資訊,請參閱相依性屬性概觀。