2013-09-26 24 views
-1

我有一個WPF應用程序,我在其中更改默認樣式,添加一些常見的填充或邊距或類似的東西。我通常會在Window.Resources或某個資源字典中執行該操作,以便在窗口或應用程序的資源中加載。示例風格可能是這樣的:根據用戶主題應用不同的樣式

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Margin" Value="5" /> 
</Style> 

到目前爲止好。請注意,雖然我正在更改默認組件,而不是用戶組件。

今天,我發現了在Windows 8中使用的Aero2主題帶來了比我從Windows 7的Aero的主題使用幾個不同的標準樣式。不幸的是,我沒有真正能夠製作出一種通用的風格,這兩種風格都適用。

因此,我希望能夠指定不同的樣式,具體取決於用戶使用的是哪個主題。例如,如果用戶使用的是航空,我想加載Aero-styles.xaml,如果它是Aero2在Windows 8上,我想加載Aero2-styles.xaml代替。

我希望這可以通過使用主題目錄並提供Aero.NormalColor.xamlAero2.NormalColor.xaml。不幸的是,這似乎只適用於定製控件,但不是內置控件。它也不會將可用鍵用作靜態/動態參考。

有沒有辦法做到這一點?爲了提供一個基礎資源字典,其中包含自定義項,然後提供另一個主題相關字典,並對所使用的主題進行微小調整?

+0

關於MSDN的相關問題,遺憾的是沒有一個明確的答案:http://social.msdn.microsoft.com/Forums/vstudio/en-US/c9cb36dc-bc85-45a8-80b2-56dbfe24c5c9/how-to-apply-基於樣式的當前主題 – poke

回答

-1

啓動時檢測主題(在加載任何UI之前),並動態添加相應的ResourceDictionary到Application.Resources.MergedDictionaries。 這對我有用。

+0

你能提供一個關於如何做到這一點的例子嗎?特別是在*主題檢測*部分?到目前爲止,我發現的所有解決方案都非常黑客,或者無法檢測到Windows 8的「Aero2」。 – poke

相關問題