Черный фон для редактора XAML - PullRequest
14 голосов
/ 03 марта 2011

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

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

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

Ответы [ 5 ]

25 голосов
/ 14 января 2014

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

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

17 голосов
/ 03 марта 2011

В вашем 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 добавьте стиль для установки цвета фона для пользовательских элементов управления:

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

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

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

HTH

4 голосов
/ 29 августа 2013

Как показано в этой записи , вы можете сжать код до одного стиля с помощью триггера, поскольку 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 автономный.

1 голос
/ 03 марта 2011

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

0 голосов
/ 03 марта 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...