如何實作相依性屬性 (WPF .NET)
本文說明如何使用 欄位來備份 Common Language Runtime (CLR) 屬性 DependencyProperty ,來實作相依性屬性。 相依性屬性支援數個進階 Windows Presentation Foundation (WPF) 屬性系統功能。 這些功能包括樣式、資料系結、繼承、動畫和預設值。 如果您想要定義的屬性來支援這些功能,請將屬性實作為相依性屬性。
重要
.NET 7 和 .NET 6 的桌面指南檔正在建置中。
範例
下列範例示範如何藉由呼叫 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 屬性,請參閱 相依性屬性概觀 。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應