Seb*_*123 11 c# xaml colors windows-phone windows-phone-8
我正在创建一个Windows Phone 8应用程序,我想改变主题颜色,而不管用户在手机操作系统中设置的主题,就像其他应用程序这样做(例如Skype).
到目前为止,我只是通过访问XAML中的LayoutRoot元素来设法更改背景颜色:
this.LayoutRoot.Background = new SolidColorBrush(Colors.White);
Run Code Online (Sandbox Code Playgroud)
和前景色:
(App.Current.Resources["PhoneForegroundBrush"] as SolidColorBrush).Color = Colors.Green;
Run Code Online (Sandbox Code Playgroud)
但是,以下内容在Windows Phone 8上不起作用:
(App.Current.Resources["PhoneBackgroundBrush"] as SolidColorBrush).Color = Colors.White;
(App.Current.Resources["PhoneAccentBrush"] as SolidColorBrush).Color = Colors.Yellow;
Run Code Online (Sandbox Code Playgroud)
我不知道为什么我不能改变PhoneBackgroundBrush或者PhoneAccentBrush我已经尝试了谷歌搜索解决方案,但他们只使用Windows Phone 7 SDK.这里的教程适用于WP 7但不适用于WP 8.
谢谢!
Jus*_*gel 11
Fabrice绝对是在正确的轨道上.获取默认的PhoneAccentBrush并更改它的颜色是可行的方法.
将此代码添加到App的构造函数的末尾,它将覆盖应用程序的WP8的Accent颜色:
Resources.Remove("PhoneAccentColor");
Resources.Add("PhoneAccentColor", Colors.Magenta);
((SolidColorBrush)Resources["PhoneAccentBrush"]).Color = Colors.Magenta;
Run Code Online (Sandbox Code Playgroud)
当我们运行此代码并单击a时,<Button />您可以看到新的Accent颜色:

如果需要不同的画笔,则创建新画笔.无需替换现有的麻烦.有一天你可能想要使用那些内置的刷子.
我建议您只为您的应用添加新资源并引用它们.
<Application.Resources>
<SolidColorBrush x:Key="AppAccentBrush" Color="#012345"/>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
在您的页面中,像这样引用它
<TextBlock Text="Custom Accent" Style="{StaticResource PhoneTextNormalStyle}"
Foreground="{StaticResource AppAccentBrush}"/>
Run Code Online (Sandbox Code Playgroud)
前几天看到一篇博文:
http://www.rudyhuyn.com/blog/2013/01/18/forcer-un-theme-sous-windows-phone-8/
虽然是法语,但不要害怕。
Windows Phone 8中有一个更改颜色的示例(检查DarkTheme()方法)