共用方式為


如何實作相依性屬性 (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 屬性的詳細資訊,請參閱相依性屬性概觀

另請參閱