Answers:
确实有:
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 Runtime API中包含的Store应用程序。如果您仅在常规Windows桌面应用程序上工作,则这不是开箱即用的WPF解决方案。