В Winforms вы можете сказать
if ( DesignMode )
{
// Do something that only happens on Design mode
}
есть ли что-то подобное в WPF?
В 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
}
}
}
В некоторых случаях мне нужно знать, инициируется ли вызов моего класса, отличного от UI, дизайнером (например, если я создаю класс DataContext из XAML). Тогда подход из этой статьи MSDN полезен:
// Check for design mode.
if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue))
{
//in Design mode
}
Для любых элементов управления WPF , размещенных в WinForms, DesignerProperties.GetIsInDesignMode(this)
не работает.
Итак, я создал ошибку в Microsoft Connect и добавил обходное решение:
public static bool IsInDesignMode()
{
if ( System.Reflection.Assembly.GetExecutingAssembly().Location.Contains( "VisualStudio" ) )
{
return true;
}
return false;
}
Поздний ответ, я знаю, но для тех, кто хочет использовать это в 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
}
(Операции Async и File не работают здесь)
Кроме того, чтобы создать экземпляр объекта времени разработки в XAML (d - это специальное пространство имен дизайнеров)
<Grid d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=True}">
...
</Grid>