在WPF中是否有DesignMode属性?
在WPF中,如果将WPF控件嵌入到WinForms中,DesignerProperties.GetIsInDesignMode(this)
将无法工作。因此,我在Microsoft Connect上创建了一个bug,并添加了一个解决方法:
public static bool IsInDesignMode() { if ( System.Reflection.Assembly.GetExecutingAssembly().Location.Contains( "VisualStudio" ) ) { return true; } return false; }
这里有个疑问,难道不应该使用GetEntryAssembly()
而不是GetExecutingAssembly()
吗?后者应该返回定义此属性的程序集。
在某些情况下,我需要知道是否通过设计器来调用我的非UI类(例如,如果我从XAML创建一个DataContext类)。然后,这篇MSDN文章中的方法是有帮助的:
// 检查设计模式。 if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue)) { // 在设计模式下 }
我在我的应用程序中应用了你的解决方案,但它不起作用。我在这里提问了这个问题:stackoverflow.com/questions/3987439。如果你愿意,请加入我们并讨论。
在WPF中,有一个DesignMode属性吗?
确实有:
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 } } }
我在我的应用程序中应用了你的解决方案,但它不起作用。我在这里提出了问题:stackoverflow.com/questions/3987439/…。如果可以,请加入我们进行讨论。
谢谢你指出这一点。你知道有什么解决方法吗?顺便说一下,似乎在Silverlight中也不起作用:connect.microsoft.com/VisualStudio/feedback/details/371837/…
在VS2019中,必须启用"Enable project code"选项(或者使用菜单->设计->🗹运行项目代码)。