WPF中有一个DesignMode属性吗?


Answers:


152

确实有

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/…。如果您愿意,请加入我们讨论。
Nam G VU 2010年

@serhio感谢您指出这一点。您知道任何解决方法吗?顺便说一下它似乎并没有在Silverlight中工作之一:connect.microsoft.com/VisualStudio/feedback/details/371837/...
恩里科坎皮多利奥

在VS2019中,Enable project code必须启用开关(或菜单->设计->🗹运行项目代码)。
marbel82

47

在某些情况下,我需要知道设计者是否发起了对非UI类的调用(例如,如果我从XAML创建DataContext类)。然后,此MSDN文章中的方法将很有帮助:

// Check for design mode. 
if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue)) 
{
    //in Design mode
}

我在您的应用程序中应用了您的解决方案,但是它不起作用。我在这里问了stackoverflow.com/questions/3987439/…。如果您愿意,请加入我们讨论。
Nam G VU 2010年

20

对于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()?后者应返回定义该属性的程序集
fjch1997

7

我知道较晚的答案-但是对于其他想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>

0

使用这个:

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解决方案。
qJake 2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.