在Winforms中你可以说
if ( DesignMode )
{
// Do something that only happens on Design mode
}
在WPF中有这样的东西吗?
答案 0 :(得分:147)
确实有:
<强> 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
}
}
}
答案 1 :(得分:46)
在某些情况下,我需要知道,我的非UI类的调用是否由设计者启动(就像我从XAML创建一个DataContext类)。然后方法from this MSDN article很有帮助:
// Check for design mode.
if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue))
{
//in Design mode
}
答案 2 :(得分:19)
对于任何托管在WinForms 中的WPF控件,DesignerProperties.GetIsInDesignMode(this)
不起作用。
所以,我创建了a bug in Microsoft Connect并添加了一个解决方法:
public static bool IsInDesignMode()
{
if ( System.Reflection.Assembly.GetExecutingAssembly().Location.Contains( "VisualStudio" ) )
{
return true;
}
return false;
}
答案 3 :(得分:5)
迟到的答案,我知道 - 但是对于其他任何想要在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>
答案 4 :(得分:-1)
使用这个:
if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{
//design only code here
}
(异步和文件操作在这里不起作用)
此外,在XAML中实例化设计时对象(d是特殊设计器命名空间)
<Grid d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=True}">
...
</Grid>