2010-08-25 89 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