次の方法で共有


添付プロパティを登録する方法

この記事では、添付プロパティを登録し、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

こちらも参照ください