Override Standard Theme in App.xaml Override Standard Theme in App.xaml wpf wpf

Override Standard Theme in App.xaml


I think you can add the Style to a ResourceDictionary and merging that with the Aero theme like this:

<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>      <!-- Adding the style to a resource dictionary -->      <ResourceDictionary>        <Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">          <Setter Property="Foreground" Value="Red" />        </Style>      </ResourceDictionary>    </ResourceDictionary.MergedDictionaries>  </ResourceDictionary></Application.Resources>

This should give ALL your textboxes red foreground color without having to explicitly specify that on each window and user control.


I had the same problem and tried Oskar's approach. Though, it caused some strange behaviour. Particularly, the styles did not apply to some controls, while applying to other controls of the same type. And I could not find any major differences between these controls.

I continued searching for the solution and I found one here:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/91718816-8674-4ad8-a3c8-ae283bebe224/

It is still not perfect and clear, but it works, at least for me.

In brief, you can get the idea from the following code:

<Application.Resources>    <ResourceDictionary>        <ResourceDictionary.MergedDictionaries>            <ResourceDictionary>                <ResourceDictionary.MergedDictionaries>                    <ResourceDictionary Source="/PresentationFramework.Aero, Version=3.0.0.0,        Culture=neutral, PublicKeyToken=31bf3856ad364e35,        ProcessorArchitecture=MSIL;component/themes/Aero.NormalColor.xaml" />                </ResourceDictionary.MergedDictionaries>                <Style x:Key="ExtendedTextBoxStyle" TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">                    <Setter Property="Foreground" Value="Red" />                </Style>            </ResourceDictionary>        </ResourceDictionary.MergedDictionaries>        <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource ExtendedTextBoxStyle}" />    </ResourceDictionary></Application.Resources>

For maintainability and readability these nested ResourceDictionary objects could go to separate XAML files.


The exact answer for this question is setting all custom style with based on value from static resource of current control. However, some control may not have default style like ListView or ListViewItem.

<Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">    <Setter Property="Width" Value="250" />    <Setter Property="Height" Value="25" /></Style>

This style can locate in any kind resource dictionary like window resources, grid resources, textbox resources or external resource dictionary.

Finally, you must add resource dictionary theme to your application resources like the following code that I add Aero theme to my application.

<Application.Resources>    <ResourceDictionary>        <ResourceDictionary.MergedDictionaries>            <ResourceDictionary Source="/PresentationFramework.Aero, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;component/themes/aero.normalcolor.xaml" />            <ResourceDictionary Source="/Themes/Default.xaml" />        </ResourceDictionary.MergedDictionaries>    </ResourceDictionary></Application.Resources>