2010-08-25 40 views
5

我有一个小问题,我正在处理wpf项目。我是WPF的新手。在我的app.xaml中,我正在为我的应用程序使用Microsoft Aero主题。我在我的app.xaml有这样的东西。压倒一切的主题在WPF

<ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/PresentationFramework.Aero;V3.0.0.0;31bf3856ad364e35;component/themes/Aero.NormalColor.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 

现在我想知道如何重写某些样式属性,例如对于按钮,我想覆盖字体样式,同时保留其余的空气样式。

如果我在窗口资源中为按钮定义样式,例如

<Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}" x:Key="RedTextBasedOnButton"> 
      <Setter Property="Foreground" Value="Red" /> 
     </Style> 

并定义基于上述样式

按钮失去所有航空样式属性的按钮。我认为这个问题是顺便做我定义支持算法FMP属性风格

BasedOn="{StaticResource {x:Type Button}}" 

我不认为资源是静态的,因为它来自一个DLL,它或许应该是这样的。但不知道。

BasedOn="{DynamicResource {x:Type Button}}" 

但上面会抛出异常,如果我在我的app.xaml中有多个resourcedictionary,例如月神和经典。我该如何判断哪一个用作默认设置,并同时使用另一个(例如luna)覆盖我的用户界面中的某些控件?因此,我的一些按钮将基于月亮风格和一些航空风格,并进行一些进一步的修改?

有什么想法?

问候,

+0

的[覆盖重写WPF主题(http://stackoverflow.com/questions/2377055/override-overriden-wpf-theme) – 2014-07-03 01:37:04

+0

可能重复做任何样式都明确的密钥,你可以绑定? – Killnine 2014-07-09 13:39:38

回答

0

对于您的具体问题上

例如对于按钮,我想覆盖字体样式,同时保留其余的空气样式。

我会试着在你的资源字典中添加此:

<FontFamily x:Key="YourFont">Tahoma</FontFamily> 

然后在你的风格使用:

<Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}" x:Key="RedTextBasedOnButton"> 
    <Setter Property="FontFamily" Value="{StaticResource YourFont}"/> 
</Style> 

所以,你可以基于一个单一的关键改变的FontFamily。

我建议在看这个http://wpfthemes.codeplex.com/SourceControl/latest#WPF.Themes.Demo/Window1.xaml