답변:
실제로 다음이 있습니다 .
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
}
}
}
Enable project code
를 활성화해야합니다 (또는 메뉴-> 디자인-> 🗹 프로젝트 코드 실행).
어떤 경우에는 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;
}
GetEntryAssembly()
대신 해야하지 GetExecutingAssembly()
않습니까? 후자는이 속성이 정의 된 어셈블리를 반환해야합니다
늦은 대답은 알고 있지만 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>
이것을 사용하십시오 :
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 솔루션이 아닙니다.