添付プロパティを登録する方法 (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

関連項目