2013-06-20 167 views
0

OK,这是我的问题:定义自定义主题样式

我想有些款式(颜色)应用到我现有的管制,例如设置按钮的前景。

为了达到这个目的,我使用了“静态资源”,例如, Foreground="{StaticResource PhoneSubtleBrush}"。所以,无论主题是什么(黑暗或光明),都会选择正确的颜色。

现在,如果我想定义一个自定义样式,但尚未包含在静态资源中,该怎么办?如果 - 假设 - 我想要一个特定按钮以红色背景(在黑暗模式)和蓝色背景(在浅色模式)出现

我该怎么做?

回答

1

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

您可以通过在每个你黑暗与光明的资源文件,宣布同名的资源,如这在黑暗的资源做到这一点:

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

,这在光照资源:

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

然后在你的按钮背景设置为:

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

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

+0

很好的答案 - 和现货。正是我需要的。非常感谢,哥们! :-) –

0

为了您的按钮,你可以使用这样的事情:

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

你也可以创建对应于你的标准的光明与黑暗的主题两个相同的按钮,他们的知名度绑定到一个静态资源PhoneDarkThemeVisibility因此,如果活跃的黑暗主题,你会看到一个黑暗的按钮,暗淡的主题。见this article。这是“Only-XAML”解决方案。

您还可以创建两个将颜色定义为StaticResource(如MyAccentColor)的暗黑色和淡色主题,并根据当前主题使用一个或另一个字典。见this article