How to set default WPF Window Style in app.xaml?

To add on to what Ray says:

For the Styles, you either need to supply a Key/ID or specify a TargetType.

If a FrameworkElement does not have an
explicitly specified Style, it will
always look for a Style resource,
using its own type as the key
– Programming WPF (Sells, Griffith)

If you supply a TargetType, all instances of that type will have the style applied. However derived types will not… it seems. <Style TargetType="{x:Type Window}"> will not work for all your custom derivations/windows. <Style TargetType="{x:Type local:MyWindow}"> will apply to only MyWindow. So the options are

  • Use a Keyed Style that you specify as the Style property of every window you want to apply the style. The designer will show the styled window.

.

    <Application.Resources>
        <Style x:Key="MyWindowStyle">
            <Setter Property="Control.Background" Value="PaleGreen"/>
            <Setter Property="Window.Title" Value="Styled Window"/>
        </Style>
    </Application.Resources> ...
    <Window x:Class="MyNS.MyWindow" Style="{StaticResource MyWindowStyleKey}">  ...
  • Or you could derive from a custom BaseWindow class (which has its own quirks), where you set the Style property during the Ctor/Initialization/Load stage once. All Derivations would then automatically have the style applied. But the designer won’t take notice of your style You need to run your app to see the style being applied.. I’m guessing the designer just runs InitializeComponent (which is auto/designer generated code) so XAML is applied but not custom code-behind.

So I’d say explicitly specified styles are the least work. You can anyways change aspects of the Style centrally.

Leave a Comment