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