Відповіді:
Дійсно є :
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
}
}
}
Enable project code
повинен бути включений (або Меню-> Дизайн-> 🗹 Запустити проектний код).
У деяких випадках мені потрібно знати, чи ініціює дизайнер ініціювання виклику до мого класу, що не є користувальницьким інтерфейсом (наприклад, якщо я створюю клас XMLL DataContext). Тоді корисний підхід з цієї статті 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;
}
GetEntryAssembly()
замість GetExecutingAssembly()
? Останній повинен повертати збірку там, де ця властивість визначена
Я знаю пізню відповідь - але для всіх, хто хоче використовувати це в 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
}
(Асинхронізація та файлові операції тут не працюють)
Крім того, для створення об'єкта часу проектування в XAML (d - спеціальний простір імен дизайнера)
<Grid d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=True}">
...
</Grid>
Windows.ApplicationModel
) призначений для додатків магазину, включених до API виконання програми Windows. Це не випускне рішення WPF, якщо ви просто працюєте над звичайним додатком для настільних ПК Windows.