Есть ли свойство DesignMode в WPF? - PullRequest
98 голосов
/ 08 января 2009

В Winforms вы можете сказать

if ( DesignMode )
{
  // Do something that only happens on Design mode
}

есть ли что-то подобное в WPF?

Ответы [ 5 ]

147 голосов
/ 09 января 2009

Действительно, есть :

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
        }
    }
}
46 голосов
/ 04 января 2010

В некоторых случаях мне нужно знать, инициирован ли дизайнером вызов моего класса, не являющегося пользовательским интерфейсом (например, если я создаю класс DataContext из XAML). Тогда подход из этой статьи MSDN полезен:

// Check for design mode. 
if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue)) 
{
    //in Design mode
}
20 голосов
/ 08 ноября 2010

Для любых элементов управления WPF , размещенных в WinForms , DesignerProperties.GetIsInDesignMode(this) не работает.

Итак, я создал ошибку в Microsoft Connect и добавил обходной путь:

public static bool IsInDesignMode()
{
    if ( System.Reflection.Assembly.GetExecutingAssembly().Location.Contains( "VisualStudio" ) )
    {
        return true;
    }
    return false;
}
5 голосов
/ 30 сентября 2016

Поздний ответ, я знаю, - но для тех, кто хочет использовать это в 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>
0 голосов
/ 07 апреля 2015

Используйте это:

if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{
    //design only code here
}

(здесь не будут работать асинхронные и файловые операции)

Кроме того, для создания экземпляра объекта времени разработки в XAML (d - это специальное пространство имен конструктора)

<Grid d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=True}">
...
</Grid>
...