0

好的,这是我的问题:

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

为此,我使用“静态资源”,例如Foreground="{StaticResource PhoneSubtleBrush}". 因此,无论主题是什么(深色或浅色),都会选择正确的颜色。

现在,如果我想定义一个自定义样式,但尚未包含在静态资源中怎么办?如果 - 比方说 -我想要一个特定的Button 以红色背景(在深色模式下)和蓝色背景(在浅色模式下)出现怎么办?

我怎样才能做到这一点?

4

2 回答 2

1

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

您可以通过在每个 Dark 和 Light 资源文件中声明相同的命名资源来做到这一点,例如在暗资源中:

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

这在 Light 资源中:

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

然后在您的 Button 中将背景设置为:

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

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

于 2013-06-20T13:07:31.680 回答
0

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

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

您还可以根据您的标准为浅色和深色主题创建两个相同的按钮,以将它们的可见性绑定到静态资源 PhoneDarkThemeVisibility,这样如果是活动的深色主题,您会看到一个深色按钮用于深色主题。见这篇文章。这是“仅 XAML”的解决方案。

您还可以创建两个 ResourceDictionaries,将颜色定义为 StaticResource(例如 MyAccentColor),用于深色和浅色主题,并根据当前主题使用一个或另一个字典。见这篇文章

于 2013-06-20T13:07:27.310 回答