定义自定义主题样式

时间:2013-06-20 09:19:30

标签: c# windows-phone-7 xaml windows-phone-8

好的,这是我的问题:

我正在尝试将一些样式(颜色)应用于我现有的控件,例如设置按钮的前景。

为实现这一目标,我正在使用“静态资源”,例如Foreground="{StaticResource PhoneSubtleBrush}"。因此,无论主题是什么(黑暗或光明),都会选择正确的颜色。

现在,如果我想定义静态资源中尚未包含的自定义样式,该怎么办?如果 - 让我们说 - 我希望特定的按钮以红色背景(在暗模式下)和蓝色背景(在灯模式下)

>

我该怎么做?

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,您希望在主题更改时更改按钮的背景颜色。如果是,则需要将您的资源引用为DynamicResource而不是StaticResource

您可以通过在黑暗资源中声明每个Dark和Light资源文件中的相同命名资源来实现此目的:

<SolidColorBrush x:Key="ButtonBackgroundColor" Color="DodgerBlue"/>

这在Light资源中:

<SolidColorBrush x:Key="ButtonBackgroundColor" Color="SkyBlue"/>

然后在按钮中将背景设置为:

<Button Background="{DynamicResource ButtonBackgroundColor}"/>

这样,当您更改主题时,它将从与新主题相关联的资源文件中选取新的ButtonBackgroundColor

答案 1 :(得分:0)

对于您的按钮,您可以使用以下内容:

Button.Background = new SolidColorBrush((Visibility)Application.Current.Resources["PhoneDarkThemeVisibility"] == Visibility.Visible ? Colors.Red : Colors.Blue);

此外,您可以创建两个相同的按钮,对应于浅色和深色主题的条件,将其可见性绑定到静态资源PhoneDarkThemeVisibility,这样,如果活动的黑暗主题,您将看到一个暗色按钮,用于灯光的暗主题。见this article。这是“Only-XAML”解决方案。

您还可以创建两个ResourceDictionaries定义颜色作为StaticResource(比如MyAccentColor),用于暗和轻主题,并根据当前主题使用一个或另一个字典。请参阅this article