programing

WPF에 Design Mode 속성이 있습니까?

lastmoon 2023. 4. 22. 10:02
반응형

WPF에 Design Mode 속성이 있습니까?

Winforms에서는 다음과 같이 말할 수 있습니다.

if ( DesignMode )
{
  // Do something that only happens on Design mode
}

WPF에도 이런 게 있나요?

실제로 다음과 같은 것이 있습니다.

System.Component Model.Designer Properties(디자이너 속성)GetIsInDesignMode

예:

using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;

public class MyUserControl : UserControl
{
    public MyUserControl()
    {
        if (DesignerProperties.GetIsInDesignMode(this))
        {
            // Design-mode specific functionality
        }
    }
}

경우에 따라서는 비 UI 클래스에 대한 콜이 설계자에 의해 시작되는지 여부를 알아야 합니다(XAML에서 DataContext 클래스를 만드는 경우 등).MSDN 기사의 접근방식은 도움이 됩니다.

// Check for design mode. 
if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue)) 
{
    //in Design mode
}

WinForms에서 호스트되는 모든 WPF 컨트롤의 경우DesignerProperties.GetIsInDesignMode(this)동작하지 않습니다.

Microsoft Connect에서 버그를 생성하여 회피책을 추가했습니다.

public static bool IsInDesignMode()
{
    if ( System.Reflection.Assembly.GetExecutingAssembly().Location.Contains( "VisualStudio" ) )
    {
        return true;
    }
    return false;
}

답변이 늦었다는 건 압니다만, 다른 사용자분들께는DataTrigger, 또는 XAML의 일반적인 장소:

xmlns:componentModel="clr-namespace:System.ComponentModel;assembly=PresentationFramework"

<Style.Triggers>
    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, 
                 Path=(componentModel:DesignerProperties.IsInDesignMode)}" 
                 Value="True">
        <Setter Property="Visibility" Value="Visible"/>
    </DataTrigger>
</Style.Triggers>

다음 항목 사용:

if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{
    //design only code here
}

(여기서는 비동기 및 파일 조작이 동작하지 않습니다)

또한 XAML에서 디자인 타임 오브젝트를 인스턴스화하려면 (d는 특별한 디자이너 이름 공간)

<Grid d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=True}">
...
</Grid>

언급URL : https://stackoverflow.com/questions/425760/is-there-a-designmode-property-in-wpf

반응형