在WPF中有DesignMode属性吗?

在Winforms中,你可以说

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

WPF中有这样的东西吗?

确实有

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 } } } 

在某些情况下,我需要知道,devise者是否启动对非UI类的调用(就像从XAML创buildDataContext类一样)。 然后从这个MSDN文章的方法是有帮助的:

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

对于WinForms中托pipe的任何WPF控件, DesignerProperties.GetIsInDesignMode(this)不起作用。

所以,我在Microsoft Connect中创build了一个bug,并添加了一个解决方法:

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

迟到的答案,我知道 – 但是对于任何想要在DataTrigger使用它的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 } 

(asynchronous和文件操作不会在这里工作)

另外,要在XAML中实例化一个devise时对象(d是特殊的devise器名称空间)

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