Как применять различные цветовые схемы в приложении WPF - PullRequest
3 голосов
/ 01 октября 2010

Есть ли способ заменить все определения кистей для приложения WPF во время выполнения и объявить стили, которые используют его только один раз? Это было бы полезно для разных цветовых схем, но сохраняйте один и тот же интерфейс и объявляйте его один раз. Все примеры, которые я могу найти, дублируют стили в разных файлах темы - это единственный способ сделать это?

Маленький пример:

Blue.xaml

<SolidColorBrush x:Key="DefaultBackgroundBrush" Color="Blue"/>

Yellow.xaml

<SolidColorBrush x:Key="DefaultBackgroundBrush" Color="Yellow"/>

Generic.xaml

<Style TargetType="{x:Type Button}">
  <Setter Property="Background" Value="{StaticResource DefaultBackgroundBrush}" />
</Style>

1 Ответ

4 голосов
/ 01 октября 2010

Сам разобрался сразу после публикации вопроса, часто так;)

Код ниже был для тестирования, поэтому не обращайте внимания на его несексуальность:

private void MenuItemBlue_Click(object sender, RoutedEventArgs e)
{
    ResourceDictionary genericSkin = new ResourceDictionary();
    genericSkin.Source = new Uri(@"/Themes/" + "generic" + ".xaml", UriKind.Relative);

    ResourceDictionary blueSkin = new ResourceDictionary();
    blueSkin.Source = new Uri(@"/Themes/" + "blue" + ".xaml", UriKind.Relative);

    Application.Current.Resources.MergedDictionaries.Clear();

    Application.Current.Resources.MergedDictionaries.Add(genericSkin);
    Application.Current.Resources.MergedDictionaries.Add(blueSkin);
}

И изменить стиль, определенный в "generic.xaml", на DynamicResource

<Style TargetType="{x:Type Button}">
    <Setter Property="Background" Value="{DynamicResource defaultColor}" />
</Style>

Другие предложения приветствуются.

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