我使用的是標準WPF主題Aero.NormalColor.xaml。它工作得很好。但對於整個應用程序,我想重寫文本框的前景色爲紅色。覆蓋App.xaml中的標準主題
我的第一次嘗試是
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/PresentationFramework.Aero, Version=3.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35,
ProcessorArchitecture=MSIL;component/themes/Aero.NormalColor.xaml">
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="TextBox">
<Setter Property="Foreground" Value="Red" />
</Style>
</ResourceDictionary>
</Application.Resources>
嗯...文本框的所有前景色變爲紅色。但是,所有文本框都會丟失主題風格。是的,我知道我應該添加「BasedOn」。我的第二次嘗試是在樣式標籤中添加「BasedOn」。
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/PresentationFramework.Aero, Version=3.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35,
ProcessorArchitecture=MSIL;component/themes/Aero.NormalColor.xaml">
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Foreground" Value="Red" />
</Style>
</ResourceDictionary>
</Application.Resources>
拋出異常。同樣WPF : Extend Theme's style - StackOverflowException
最終,我通過這個達到了我的目標。
在App.xaml中
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/PresentationFramework.Aero, Version=3.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35,
ProcessorArchitecture=MSIL;component/themes/Aero.NormalColor.xaml">
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
而且在所有窗口和用戶控制,我必須明確地設置
<UserControl.Resources>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Foreground" Value="Red" />
</Style>
</UserControl.Resources>
上面的代碼複製和粘貼多次,這是不容易的保持。有沒有人知道如何實現我的目標,只需將前景設置爲紅色一次?
爲我工作 - 謝謝。 – djskinner 2010-01-21 09:52:09
爲我工作 - 但您最好將文本框樣式放在單獨的資源字典文件(例如TextBoxStyles.xaml)中,並將添加到合併的字典中。另外,您可能會遇到合併字典的錯誤,導致樣式不適用於所創建的第一個文本框。 –
Schweder
2012-03-15 13:36:02