2011-04-14 166 views
5

是否可以创建自定义主题并将其用作默认主题?覆盖默认主题的自定义主题WP7

我可以在任何地方找到的每个示例都表示,您可以通过复制ThemeResources.xamlSystem.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> 

是否有可能包括改变风格/刷子/颜色的自定义主题的/ etc所有默认设置,而无需显式地设置他们无处不在?

回答

4

这不是在WP7的当前版本可能有一个新的样式,改变默认的没有明确地通过设定为“X:键”:

隐式样式是Silverlight 4中的功能(和WPF):Windows Phone 7基于Silverlight 3+(增加了一些Silverlight 4功能)。由于Silverlight 3中没有隐式样式,这意味着在Windows Phone 7中也无法使用它们。

现在,您可以:

  1. 只覆盖默认的画笔/颜色资源,你指出的第一篇文章中解释。请注意,所有WP7控件都会改变它们的颜色。还请注意,由于某些原因,默认背景保持不变。这是WP7当前版本的一个已知问题,可能会在“芒果”更新中修复。

  2. 如果您想要任何新的Style/ControlTemplate,您必须使用您在第二篇文章中提到的“x:Key”/ {StaticResource ...}方法。

最后,德里克·莱金前面所提到的:希望这个问题将得到固定在芒果更新!

+0

我有一个我希望随时应用的风格/主题,无论它是光线还是黑暗的主题。是通过复制'ThemeResources.xaml'文件并更改所有内容的最好方法,然后明确设置不像背景那样设置的东西?还是有很多东西不会通过使用合并主​​题隐式设置? – 2011-04-14 15:19:30

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> 

从理论上讲,这应该是足够的,但不幸的是事实并非如此。出于某种原因(希望这将获得固定在芒果更新的错误),您还需要包括Reset.xaml在Custom.xaml这样的:

<ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="Reset.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 

一旦你做到了这一点,这应该是它;你不需要做其他事情。

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,我们将不再需要做到这一点的解决方法。