Как определить цвет фона по умолчанию для экземпляров окна в общем ResourceDictionary? - PullRequest
7 голосов
/ 09 января 2011

Я не могу установить цвет фона по умолчанию для всех моих окон в моем приложении.Кто-нибудь знает, как это сделать?

В настоящее время я задаю тему в своем файле App.xaml следующим образом.

<Application>
    <Application.Resources>
        <ResourceDictionary Source="Themes/SomeTheme.xaml" />

Это в основном стиль моего всего приложения.

Внутри SomeTheme.xaml Я пытаюсь установить цвет по умолчанию для всех моих окон следующим образом.

<SolidColorBrush Color="{DynamicResource MainColor}" x:Key="CommonBackgroundBrush" />
<Style TargetType="{x:Type Window}">
    <Setter Property="Background" Value="{DynamicResource CommonBackgroundBrush}" />
</Style>

Этот синтаксис полностью игнорируется для производных типа Window.

Есть ли способ заставить стиль применить ко всем производным Window?

Странная вещь в этом синтаксисе заключается в том, что он действительно показывает правильный цвет в окне предварительного просмотра дизайна VS.

Ответы [ 4 ]

6 голосов
/ 09 января 2011

Ваши окна не являются экземплярами Window, они являются экземплярами классов, производных от Window. Поэтому я думаю, что вам придется перечислить их все, но вы можете использовать BasedOn, чтобы помочь.

4 голосов
/ 10 января 2011

Придайте своему стилю x:Key,

<Style x:Key="WindowStyle" TargetType="{x:Type Window}">

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

<Window x:Class="WpfApplication1.MainWindow" ... Style="{StaticResource WindowStyle}">
4 голосов
/ 10 января 2011

Если на самом деле нет фактического наследования, это может быть так просто, как вы можете сделать это:

<Style TargetType="{x:Type Window}">
    <Setter Property="Background">
        <Setter.Value>
            <SolidColorBrush Color="Blue"/>         
        </Setter.Value>
    </Setter>
</Style>
<Style TargetType="{x:Type local:MainWindow}" BasedOn="{StaticResource {x:Type Window}}"/>
<Style TargetType="{x:Type local:Dialogue}" BasedOn="{StaticResource {x:Type Window}}"/>
...

По крайней мере, вам не нужно копировать весь стиль таким образом

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

Я новичок во всем этом, так что вот моя стоимость 5 пенсов. Я изменил фон для сетки ... не уверен, если есть какие-либо проблемы, делающие это таким образом:)

 <Style TargetType="{x:Type Grid}">
    <Setter Property="Background" Value="#FFECE9D8"/>
</Style>
...