Черный фон для XAML Editor - программирование
Подтвердить что ты не робот

Черный фон для XAML Editor

В настоящее время я работаю над пользовательским элементом управления, который имеет белый текст и прозрачный фон. К сожалению, поскольку дизайн XAML в VS2010 имеет белый фон, я не вижу ничего, что я проектирую!

Я прошел через все диалоги настроек, о которых я могу думать, но не смог найти параметр, который изменяет цвет фона конструктора XAML.

Кто-нибудь знает, как это можно сделать?

4b9b3361

Ответ 1

В вашем XAML установите фон в черный. Затем в своем пользовательском элементе используйте DesignerProperties для установки фона во время выполнения:

XAML

<UserControl .... Background="Black" .... >

Код за

public YourUserControl()
{
  InitializeComponent();

  if( !System.ComponentModel.DesignerProperties.GetIsInDesignMode( this ) )
  {
    this.Background = Brushes.Transparent;
  }

}



Альтернативный метод

UserControl:

В своем пользовательском элементе не объявляйте цвет фона:

<UserControl ... namespaces ...>

Код UserControl:

В вашем конструкторе пользовательского управления используйте метод DesignTime, как указано выше, но проверьте, не является ли он режимом проектирования (напротив проверки от другого метода):

public YourUserControl()
{
  InitializeComponent();

  if( System.ComponentModel.DesignerProperties.GetIsInDesignMode( this ) )
  {
    this.Background = Brushes.Black;
  }

}

App.xaml:

Наконец, в вашем App.xaml добавьте стиль для установки цвета фона для UserControls:

<Application.Resources>
  <Style TargetType="{x:Type UserControl}">
    <Setter Property="Background" Value="Black" />
  </Style>
</Application.Resources>

Вот что происходит:

  • App.xaml будет влиять на UserControl во время разработки, потому что типизированный стиль применяется к объекту автоматически, но он применяется не к производному объекту (UserControl в этом случае). Таким образом, во время разработки VS считает, что он должен применять стиль, но во время выполнения он будет проигнорирован.
  • Проверка GetIsInDesignMode будет влиять на UserControl при просмотре элемента управления в окне, использующем UserControl, потому что VS компилирует UserControl во время разработки, чтобы визуализировать его в Visual Designer.

НТН-х

Ответ 2

В качестве альтернативы, начиная с VS 2013, вы можете сделать это в Инструменты → Параметры → Шрифты и цвета, XAML UI Designer.

Редактируемые цвета переднего плана/фона - это цвета фона шахматной доски. Я просто установил их обоих в темно-серый цвет, который, похоже, работает как для фона, так и для темного темного фона.

Ответ 3

Как показано в этот пост, вы можете сконденсировать код в один стиль с помощью триггера, так как DesignerProperties.IsInDesignMode является прикрепленное свойство.

Собственно, код там не совсем прав. Он определяет неявный стиль для TargetType="{x:Type UserControl}", который во всяком случае игнорируется во время выполнения, потому что ваш UserControl фактически является производным классом - как Metro Smurf указывает в своем первом пункте

App.xaml будет влиять на UserControl во время разработки, поскольку типизированный стиль применяется к объекту автоматически, но это не применяется к производному объекту (UserControl в этом случае). Итак, при проектировании время, VS считает, что он должен применять стиль, но во время выполнения он будет игнорируются.

Правильный способ сделать это - дать ему ключ и применить его вручную к вашим UserControls:

<Application
    ...
    xmlns:componentModel="clr-namespace:System.ComponentModel;assembly=PresentationFramework">
    ...
    <Application.Resources>
        ...
        <Style x:Key="DesignerBlackBackgroundStyle" TargetType="Control">
            <Style.Triggers>
                <Trigger Property="componentModel:DesignerProperties.IsInDesignMode"
                         Value="True">
                    <Setter Property="Background" Value="Black" />
                </Trigger>
            </Style.Triggers>
        </Style>

и

<UserControl x:Class="MyUserControl"
             Style="{StaticResource ResourceKey=DesignerBlackBackgroundStyle}">

В качестве триггера это имеет дополнительное преимущество перед установкой фона в кодировке - он будет вести себя правильно, если фон явно установлен где-то в другом месте, например, из содержащего UserControl:

<UserControl x:Class="ContainerUserControl" ...>
    ...
    <local:MyUserControl Background="Gray" />

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

Ответ 4

Можете ли вы использовать Blend для проектирования? Blend имеет возможность переключаться между светлыми и темными цветовыми схемами.

Ответ 5

Установите цвет фона usercontrol на черный в XAML, затем установите его прозрачным в коде.

Edit: Если вам не нравится оставлять код таким образом, вы можете отменить это изменение до того, как вы отпустите его, как только закончите со всеми работами дизайнера, хотя нет никакого вреда, чтобы оставить его.