是否可以创建自定义主题并将其用作默认主题?
我可以在任何地方找到的每个示例都说您可以通过复制ThemeResources.xaml
和System.Windows.xaml
文件并将其作为合并词典添加到您的应用中来创建自定义主题。
http://windowsphonegeek.com/articles/Creating-WP7-Custom-Theme-ndash-Basic-Theme-Implementation Overriding themes in Windows Phone 7
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Resources/CustomThemeResources.xaml" />
<ResourceDictionary Source="Resources/CustomThemeStyles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
然后我又读了一些你需要在样式文件中包含画笔的内容,所以在CustomThemeStyles.xaml
我有这个。
http://www.windowsphonegeek.com/articles/Creating-WP7-Custom-Theme---Complex-Theme
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="CustomThemeResources.xaml" />
</ResourceDictionary.MergedDictionaries>
它不起作用...所以我下载了示例应用程序,果然,每个想要改变颜色的页面,比如背景颜色,都会将它设置在它最外面的组件上。
<Grid Background="{StaticResource PhoneBackgroundBrush}">
...
</Grid>
是否可以包含更改所有默认值的样式/画笔/颜色/等的自定义主题,而无需在任何地方明确设置它们?
答案 0 :(得分:4)
在当前版本的WP7中,如果没有通过“x:Key”显式设置更改默认的样式,则无法使用新样式:
隐式样式是Silverlight 4(和WPF)的一项功能:Windows Phone 7基于Silverlight 3+(添加了一些Silverlight 4功能)。由于Silverlight 3中没有隐式样式,这意味着在Windows Phone 7中也无法使用它们。
现在你可以:
仅覆盖默认的画笔/颜色资源,如您指出的第一篇文章中所述。请注意,所有WP7控件都将更改其颜色。另请注意,由于某种原因,默认背景保持不变。这是当前版本的WP7的一个已知问题,可能会在“芒果”更新中修复。
如果您想要任何新的Style / ControlTemplate,您必须使用您指出的第二篇文章中提到的“x:Key”/ {StaticResource ...}方法。
最后,正如前面提到的 Derek Lakin :希望这个错误会在芒果更新中修复!
答案 1 :(得分:1)
如果您创建资源字典并将其称为包含所有标准画笔资源的Reset.xaml。将任何自定义资源样式/画笔放入另一个资源字典中(我们现在将其称为Custom.xaml)。在App.xaml中包含这两个资源字典,如下所示:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Resources/Reset.xaml"/>
<ResourceDictionary Source="Resources/Custom.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
从理论上讲,这应该足够了,但不幸的是,事实并非如此。出于某种原因(希望在芒果更新中修复的错误),您还需要在Custom.xaml中包含Reset.xaml,如下所示:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Reset.xaml"/>
</ResourceDictionary.MergedDictionaries>
一旦你完成了这个,那应该是它;你不应该做任何其他事情。
答案 2 :(得分:1)
随着Windows Phone Mango(7.1)的发布,合并XAML字典样式的功能不再有效。目前,您将不得不在代码隐藏中更改应用程序资源刷机颜色条目;最好是在App.xaml.cs中的App()的构造函数中。
示例:
(App.Current.Resources["PhoneAccentBrush"] as SolidColorBrush).Color = Color.FromArgb(12, 12, 54, 145);
(App.Current.Resources["PhoneForegroundBrush"] as SolidColorBrush).Color = Colors.Green;
(App.Current.Resources["PhoneBackgroundBrush"] as SolidColorBrush).Color = Colors.Purple;
希望在WP8 SDK中我们不再需要这样做。