다음을 통해 공유


방법: 디자인 타임에 속성 동작 변경

확장성을 사용하여 WPF Designer for Visual Studio를 사용자 지정할 때 사용자 지정 컨트롤을 만드는 경우가 많습니다. 사용자가 계속 속성 값을 정상적으로 설정할 수 있게 하면서도 디자인 타임에 컨트롤 속성이 런타임과 다르게 동작하도록 해야 하는 경우가 있습니다. 예를 들어 사용자가 컨트롤의 visible 속성을 false로 설정할 수 있게 할 수 있지만 컨트롤은 디자인 타임에 여전히 볼 수 있어야 합니다.

이 항목에서는 사용자 지정 컨트롤 속성의 디자인 타임 동작을 변경하는 절차에 대해 설명합니다. 절차를 단계별로 안내하는 자세한 예제는 연습: 디자인 타임에 속성 동작 변경을 참조하십시오.

중요

이 방법을 사용하면 디자이너의 속성 동작이 XAML 뷰의 속성 값과 일치하지 않습니다. XAML 뷰에서는 사용자가 디자인 타임에 입력한 값을 표시합니다. XAML 뷰의 값은 런타임에 속성이 보일 동작을 나타냅니다.

컨트롤이 디자인 타임에 있는지 확인하고 해당 속성을 적절히 설정하려면 방법: 사용자 지정 컨트롤이 디자인 타임에 있는지 런타임에 있는지 확인을 참조하십시오.

사용자 지정 DesignModeValueProvider 만들기

이 절차에서는 사용자 지정 DesignModeValueProvider 클래스를 만듭니다. TranslatePropertyValue 메서드에서 변경할 새 속성 동작을 위한 사용자 지정 논리를 추가할 수 있습니다. 이러한 변경은 디자이너에만 적용됩니다. 런타임에 속성은 사용자가 설정한 대로 동작합니다.

사용자 지정 DesignModeValueProvider를 만들려면

  1. 프로젝트에서 다음 어셈블리에 대한 참조를 추가합니다.

    • Microsoft.Windows.Design.Extensibility
  2. 사용자 지정 컨트롤 프로젝트에 새 클래스를 추가하고 DesignModeValueProvider에서 상속하도록 클래스를 편집합니다. 코드가 다음과 같아야 합니다.

    
    Public Class YourCustomDesignModeValueProvider
        Inherits Microsoft.Windows.Design.Model.DesignModeValueProvider
    
    End Class
    
    
    class YourCustomDesignModeValueProvider : Microsoft.Windows.Design.Model.DesignModeValueProvider
    {
    }
    
  3. 클래스에 생성자를 추가합니다. 생성자에서 캡처할 속성을 식별합니다.

    
    Public Sub New()
    
        'Properties.Add(<The Property To Change Goes Here>)
        'More properties can go here.
    
    End Sub
    
    
    public YourCustomDesignModeValueProvider()
    {
        //Properties.Add(<The Property To Change Goes Here>);
        //More properties can go here.
    }
    
  4. 클래스에서 TranslatePropertyValue 메서드를 재정의합니다. 디자인 타임에 새 속성 동작을 여기에 지정합니다.

    
    Public Overrides Function TranslatePropertyValue( _
        ByVal item As ModelItem, _
        ByVal identifier As PropertyIdentifier, _
        ByVal value As Object) As Object
    
        'If identifier.Name = <Name of the property to change> Then
        '
        '    Custom logic goes here.
        'End If
    
        'More custom logic for more properties can go here.
    
        Return MyBase.TranslatePropertyValue(item, identifier, value)
    End Function
    
    
    public override object TranslatePropertyValue(ModelItem item, PropertyIdentifier identifier, object value)
    {
        //if (identifier.Name == <Name of the property to change>)
        //{
        //    Custom logic goes here.
        //}
    
        //More custom logic for more properties can go here.
    
        return base.TranslatePropertyValue(item, identifier, value);
    }
    

    참고

    이 절차에서는 두 가지 다른 속성을 처리하는 하나의 DesignModeValueProvider를 만듭니다. 또한 서로 다른 속성을 처리하는 여러 DesignModeValueProvider 개체를 만들 수도 있습니다.

사용자 지정 컨트롤에 DesignModeValueProvider 연결

이 절차에서는 FeatureAttribute 특성을 사용하여 DesignModeValueProvider를 사용자 지정 컨트롤에 연결합니다.

사용자 지정 컨트롤에 DesignModeValueProvider를 연결하려면

  1. 사용자 지정 컨트롤의 클래스 선언을 찾습니다. 코드가 다음과 같아야 합니다.

    
    Public Class YourCustomControl
    
    
    class YourCustomControl
    
  2. 클래스 선언에 FeatureAttribute 특성을 추가하고 이전 절차에서 만든 DesignModeValueProvider를 지정합니다.

    <Microsoft.Windows.Design.Features.Feature(GetType(YourCustomDesignModeValueProvider))> _
    Public Class YourCustomControl
    
    [Microsoft.Windows.Design.Features.Feature(typeof(YourCustomDesignModeValueProvider))]
    class YourCustomControl
    

    참고

    특성 테이블을 제공하여 DesignModeValueProvider를 사용자 지정 컨트롤에 연결할 수도 있습니다. 자세한 내용은 디자인 타임 메타데이터 제공을 참조하십시오.

참고 항목

기타 리소스

디자인 타임 동작과 런타임 동작 비교

WPF Designer 확장성 이해

WPF Designer 확장성