Цвет фона только для дизайна-времени в WPF? - программирование
Подтвердить что ты не робот

Цвет фона только для дизайна-времени в WPF?

В WPF XAML есть удобные DesignHeight и DesignWidth, например, в коде как

<UserControl ... d:DesignHeight="500" d:DesignWidth="500" ... />

что отлично, потому что я могу построить макет с представительным, но не заблокированным размером управления.

Тем не менее, я часто создаю темные пользовательские интерфейсы, где метки и т.д. должны быть белыми, но мои элементы управления все еще нуждаются в прозрачном цвете фона. Это создает неудобства при проектировании, поскольку белый цвет по умолчанию является цветом фона по умолчанию для прозрачных элементов управления в дизайнере, что приводит к нечитаемым меткам белого цвета.

Есть ли способ или стратегия для установки цвета фона времени разработки с таким же удобством, как DesignHeight/DesignWidth?

4b9b3361

Ответ 1

Мой ответ был найден здесь: Черный фон для XAML Editor. Существует ряд вариантов, включая проверку System.ComponentModel.DesignerProperties.GetIsInDesignMode(this) во время выполнения.

Ответ 3

Имеется недокументированное свойство d:DesignStyle типа Style, которое вы можете установить в пользовательском элементе управления. Этот стиль применяется только в дизайнере и не используется во время выполнения.

Вы используете его следующим образом:

<UserControl ... d:DesignStyle="{StaticResource MyDesignStyle}" />

Или вот так:

<UserControl ...>
    <d:DesignerProperties.DesignStyle>
        <Style TargetType="UserControl">...</Style>
    </d:DesignerProperties.DesignStyle>
</UserControl>

Обратите внимание, что любое значение, установленное в свойстве Style (том, которое используется во время выполнения), также переопределит DesignStyle в конструкторе.

Ответ 4

Метод 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, но, конечно, вы можете использовать любой другой словарь. Затем в коде С# удалите стиль из Resource­Dict­ionary, когда режим разработки не обнаружен. Сделайте это в переопределении OnInitialized:

protected override void OnInitialized(EventArgs e)
{
    if (DesignerProperties.GetIsInDesignMode(this) == false)
        Resources.Remove(typeof(TreeViewItem));

    base.OnInitialized(e);
}

Режим разработки:                             Режим выполнения:

режим разработки   режим выполнения