在WPF中是否有DesignMode属性?

16 浏览
0 Comments

在WPF中是否有DesignMode属性?

在Winforms中,你可以这样说:\n

if ( DesignMode )
{
  // 只有在设计模式下发生的操作
}

\n在WPF中有类似的功能吗?

0
0 Comments

在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()吗?后者应该返回定义此属性的程序集。

0
0 Comments

在某些情况下,我需要知道是否通过设计器来调用我的非UI类(例如,如果我从XAML创建一个DataContext类)。然后,这篇MSDN文章中的方法是有帮助的:

// 检查设计模式。
if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue)) 
{
    // 在设计模式下
}

我在我的应用程序中应用了你的解决方案,但它不起作用。我在这里提问了这个问题:stackoverflow.com/questions/3987439。如果你愿意,请加入我们并讨论。

0
0 Comments

在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"选项(或者使用菜单->设计->🗹运行项目代码)。

0