好的,这是我的问题:
我正在尝试将一些样式(颜色)应用于我现有的控件,例如设置按钮的前景。
为实现这一目标,我正在使用“静态资源”,例如Foreground="{StaticResource PhoneSubtleBrush}"
。因此,无论主题是什么(黑暗或光明),都会选择正确的颜色。
现在,如果我想定义静态资源中尚未包含的自定义样式,该怎么办?如果 - 让我们说 - 我希望特定的按钮以红色背景(在暗模式下)和蓝色背景(在灯模式下)
>我该怎么做?
答案 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。