2010-03-12 95 views
0

我所看到的大多數WPF樣式被拆分成一個非常長的Theme.xaml文件。我想我的分手是爲了便於閱讀,所以我Theme.xaml看起來是這樣的:拆分WPF樣式XAML文件

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="/PresentationFramework.Aero;v3.0.0.0;31bf3856ad364e35;component/themes/aero.normalcolor.xaml"/> 
     <ResourceDictionary Source="Controls/Brushes.xaml"/> 
     <ResourceDictionary Source="Controls/Buttons.xaml"/> 
     ... 
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

的問題是,這種解決方案是行不通的。我有一個默認的按鈕樣式是支持算法FMP一個按鈕的默認Aero的風格:

<Style x:Key="{x:Type Button}" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}"> 
    <Setter Property="FontSize" Value="14"/> 
    ... 
</Style> 

如果我把所有這一切都在一個文件中,但一旦工程,我把它分解了,我得到的StackOverflow例外,因爲它認爲它是BasedOn本身。有沒有解決的辦法?在合併資源字典時,WPF如何添加資源?

回答

0

如果兩種樣式總是要應用,爲什麼不更改較小樣式的鍵(稍後覆蓋的樣式)?然後您將通過該密鑰而不是{StaticResource {x:Type Button}}來引用後面的密鑰。這應該通過確定基本類型來解決問題。它還可以解決潛在的問題,以錯誤順序應用樣式(例如,如果您多次重新定義單個屬性,這些字典的應用順序會導致不同的結果)。

只要最終的後代風格具有正確的鍵,總和應正確應用。

+0

我自己的自定義按鈕樣式適用於任何地方,我不希望每次創建按鈕時都必須明確設置按鈕樣式。我只想調整PresentationFramework.Aero中現有的默認按鈕樣式 – anon 2010-03-12 17:30:00

0

如果您省略了BasedOn,那麼哪些屬性沒有您期望的值?我注意到,如果您想覆蓋幾個屬性,則可以安全地忽略BasedOn,並且默認樣式的模板仍然可以應用。