Windows Phone 8 更改强调色和主题颜色

11

我正在为Windows Phone 8创建一个应用程序,我想改变主题颜色,而不管用户在手机操作系统中设置的主题是什么,就像其他应用程序一样(例如Skype)。

到目前为止,我只能通过访问XAML中的LayoutRoot元素来更改背景颜色:

this.LayoutRoot.Background = new SolidColorBrush(Colors.White);

前景色:

(App.Current.Resources["PhoneForegroundBrush"] as SolidColorBrush).Color = Colors.Green;

但是,以下内容在Windows Phone 8上无法使用:

(App.Current.Resources["PhoneBackgroundBrush"] as SolidColorBrush).Color = Colors.White;
(App.Current.Resources["PhoneAccentBrush"] as SolidColorBrush).Color = Colors.Yellow;

我不知道为什么无法更改PhoneBackgroundBrushPhoneAccentBrush,我已经尝试过谷歌寻找解决方案,但它们只适用于Windows Phone 7 SDK。这里的教程适用于WP 7,但不适用于WP 8。

谢谢!

3个回答

11

Fabrice肯定是走在正确的道路上。获取默认的PhoneAccentBrush并更改它的颜色是正确的方法。

将以下代码添加到您的应用程序构造函数的末尾,即可覆盖WP8应用程序的强调颜色:


```` (Application.Current.Resources["PhoneAccentBrush"] as SolidColorBrush).Color = Colors.Purple; ````
    Resources.Remove("PhoneAccentColor");
    Resources.Add("PhoneAccentColor", Colors.Magenta);
    ((SolidColorBrush)Resources["PhoneAccentBrush"]).Color = Colors.Magenta;
当我们运行这段代码并点击一个 <Button />,你会看到新的强调颜色:

带洋红背景的已点击按钮


3
我尝试了这个方法,将 using System.Windows.Media; 添加到 App.xaml.cs 的最上面,并在 InitializeLanguage(); 后面的 App() 中添加了你的代码,但是没有任何效果。我也把它放在构造函数的开头,但也没有任何区别。 - Seb123
这似乎对某些元素(如按钮和文本样式)起作用,但对其他元素不起作用。ApplicationBar、MessageBox和CheckBox没有捕捉到这种颜色变化。也许还有另一种需要覆盖的样式,或者其中一些项目可能无法以相同的方式进行样式处理。 - Gavin
ApplicationBar、SystemTray、MessageBox等都是与XAML样式无关的外壳UI。因此,它们不会受到此更改的影响。其中一些公开了特定的API以配置其UI,而其他则没有。 - JustinAngel

8
如果你想要不同的画笔,那么就创建新的画笔。不需要费力去替换现有的画笔。有一天,你可能会想使用那些内置的画笔。
我建议只需将新资源添加到你的应用程序中并引用它们。
<Application.Resources>
    <SolidColorBrush x:Key="AppAccentBrush" Color="#012345"/>
</Application.Resources>

在您的页面中,像这样引用它:

<TextBlock Text="Custom Accent" Style="{StaticResource PhoneTextNormalStyle}"
           Foreground="{StaticResource AppAccentBrush}"/>

我对Windows Phone环境不是很熟悉,请谅解。你的第一个代码片段应该放在XAML文件的哪里?我收到了错误消息:“在类型'Application'中找不到可附加属性'Resources'”。 - Seb123

3

1
谢谢你的帮助 :). 我尝试使用DarkTheme方法,但是没有任何反应。我在App.xaml.cs中的InitializePhoneApplication()之后调用了DarkTheme();. - Seb123
尝试过两种方法吗?第二种被称为DarkTheme但颜色不同。 - Fabrice
我尝试了Huyn的方法,但是没有改变背景。不过,从ThemeManager中包含单个文件却完美地解决了问题。 - ruffin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接