연결된 속성을 등록하는 방법(WPF .NET)

이 문서에서는 연결된 속성을 등록하고 XAML(Extensible Application Markup Language) 및 코드를 통해 연결된 속성에 액세스할 수 있는 공용 접근자를 제공하는 방법을 설명합니다. 연결된 속성을 사용하면 XAML 요소가 그 개체 모델에서 이러한 추가 속성을 정의하지 않더라도 모든 XAML 요소에서 추가 속성/값 쌍을 설정할 수 있습니다. 추가 속성은 전역적으로 액세스할 수 있습니다. 연결된 속성은 대체로 기존 속성 래퍼가 없는 특수한 형식의 종속성 속성으로 정의됩니다. WPF(Windows Presentation Foundation) 형식에 대한 연결된 속성들은 대부분 종속성 속성으로 구현됩니다. 모든 DependencyObject 파생 형식에 대한 종속성 속성을 만들 수 있습니다.

중요

.NET 7 및 .NET 6에 관한 데스크톱 가이드 설명서는 제작 중입니다.

예제

다음 예제에서는 RegisterAttached 메서드를 사용하여 연결된 속성을 종속성 속성으로 등록하는 방법을 보여줍니다. 공급자 클래스에는 속성 메타데이터에 기본값을 지정하는 옵션이 있습니다. 속성 메타데이터에 관한 자세한 내용은 종속성 속성 메타데이터를 참조하세요. 이 예제에서 HasFish 속성에는 기본값이 false로 설정된 Boolean 값 형식이 있습니다.

연결된 속성에 대한 공급자 클래스는 명명 규칙 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

참고 항목