WPF에 DesignMode 속성이 있습니까?


답변:


152

실제로 다음이 있습니다 .

System.ComponentModel.DesignerProperties.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
        }
    }
}

내 응용 프로그램에 솔루션을 적용했지만 작동하지 않습니다. 나는 여기에서 그것을 물었다 . stackoverflow.com/questions/3987439/… 원하신다면 저희와 함께 토론 해주십시오.
— Nam G VU

@serhio 지적 해 주셔서 감사합니다. 해결 방법을 알고 있습니까? Btw Silverlight에서도 작동하지 않는 것 같습니다. connect.microsoft.com/VisualStudio/feedback/details/371837/…
— Enrico Campidoglio

VS2019에서 스위치 Enable project code를 활성화해야합니다 (또는 메뉴-> 디자인-> 🗹 프로젝트 코드 실행).
— marbel82

47

어떤 경우에는 UI가 아닌 클래스에 대한 호출이 디자이너에 의해 시작되었는지 여부를 알아야합니다 (예 : XAML에서 DataContext 클래스를 만드는 경우). 이 MSDN 기사 의 접근 방식 이 도움이됩니다.

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

내 응용 프로그램에 솔루션을 적용했지만 작동하지 않습니다. 나는 여기에서 그것을 물었다 . stackoverflow.com/questions/3987439/… 원하신다면 저희와 함께 토론 해주십시오.
— Nam G VU

20

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

그래서 Microsoft Connect에서 버그를 만들고 해결 방법을 추가했습니다.

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

GetEntryAssembly()대신 해야하지 GetExecutingAssembly()않습니까? 후자는이 속성이 정의 된 어셈블리를 반환해야합니다
— fjch1997

7

늦은 대답은 알고 있지만 DataTrigger일반적으로 XAML 또는 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>

0

이것을 사용하십시오 :

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

(비동기 및 파일 작업은 여기서 작동하지 않습니다)

또한 XAML에서 디자인 타임 개체를 인스턴스화하려면 (d는 특수 디자이너 네임 스페이스)

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

이 클래스 ( Windows.ApplicationModel)는 Windows 런타임 API에 포함 된 스토어 앱용입니다. 일반 Windows 데스크톱 응용 프로그램에서 작업하는 경우에는 기본 제공되는 WPF 솔루션이 아닙니다.
— qJake
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.