Ответ 1
Мой ответ был найден здесь: Черный фон для XAML Editor. Существует ряд вариантов, включая проверку System.ComponentModel.DesignerProperties.GetIsInDesignMode(this)
во время выполнения.
В WPF XAML есть удобные DesignHeight
и DesignWidth
, например, в коде как
<UserControl ... d:DesignHeight="500" d:DesignWidth="500" ... />
что отлично, потому что я могу построить макет с представительным, но не заблокированным размером управления.
Тем не менее, я часто создаю темные пользовательские интерфейсы, где метки и т.д. должны быть белыми, но мои элементы управления все еще нуждаются в прозрачном цвете фона. Это создает неудобства при проектировании, поскольку белый цвет по умолчанию является цветом фона по умолчанию для прозрачных элементов управления в дизайнере, что приводит к нечитаемым меткам белого цвета.
Есть ли способ или стратегия для установки цвета фона времени разработки с таким же удобством, как DesignHeight/DesignWidth?
Мой ответ был найден здесь: Черный фон для XAML Editor. Существует ряд вариантов, включая проверку System.ComponentModel.DesignerProperties.GetIsInDesignMode(this)
во время выполнения.
Я обнаружил, что вы можете сделать это для себя. Пользовательские атрибуты времени разработки в Silverlight и дизайнере WPF - это учебник, как сделать это как для Silverlight, так и для WPF.
Имеется недокументированное свойство d:DesignStyle
типа Style
, которое вы можете установить в пользовательском элементе управления. Этот стиль применяется только в дизайнере и не используется во время выполнения.
Вы используете его следующим образом:
<UserControl ... d:DesignStyle="{StaticResource MyDesignStyle}" />
Или вот так:
<UserControl ...>
<d:DesignerProperties.DesignStyle>
<Style TargetType="UserControl">...</Style>
</d:DesignerProperties.DesignStyle>
</UserControl>
Обратите внимание, что любое значение, установленное в свойстве Style
(том, которое используется во время выполнения), также переопределит DesignStyle
в конструкторе.
Метод d:DesignerProperties.DesignStyle
, показанный на этой странице, отлично подходит для применения стиля WPF только по дизайну к одиночному управлению, но он не отображается работайте за Style
в ResourceDictionary
, который применим ко всем соответствующим образом типизированным элементам управления или элементам в рамках словаря. Ниже представлено простое решение, которое я нашел для развертывания стиля только для дизайнера в ResourceDictionary
.
Рассмотрим, например, a Window
, содержащий a TreeView
, где мы хотим, чтобы узлы TreeViewItem
отображались как полностью расширенные, но только во время разработки. Сначала поместите желаемый стиль в словарь XAML обычным способом.
<Window.Resources>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="True" />
</Style>
</Window.Resources>
Здесь Style
помещается в ResourceDictionary
из Window
, но, конечно, вы можете использовать любой другой словарь. Затем в коде С# удалите стиль из ResourceDictionary
, когда режим разработки не обнаружен. Сделайте это в переопределении OnInitialized
:
protected override void OnInitialized(EventArgs e)
{
if (DesignerProperties.GetIsInDesignMode(this) == false)
Resources.Remove(typeof(TreeViewItem));
base.OnInitialized(e);
}
Режим разработки: Режим выполнения: