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.