Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I am trying to set the default Style for every window in my WPF Windows application in my app.xaml. So far i have this in app.xaml:

<Application.Resources>     <ResourceDictionary>         <Style x:Key="WindowStyle" TargetType="{x:Type Window}">             <Setter Property="Background" Value="Blue" />         </Style>     </ResourceDictionary> </Application.Resources> 

I can get the window to appear with this style when running the app (but not in VS designer) by specifically telling the window to use this style via:

Style="{DynamicResource WindowStyle} 

This works, but is not ideal. So how do I:

  1. Have all windows automatically use the style (so i don't have to specify it on every window)?
  2. Have VS designer show the style?

Thanks!

like image 530
NoizWaves Avatar asked Jan 10 '09 23:01

NoizWaves


People also ask

How do I add styles to APP XAML?

Put simply, where you declare a style affects where the style can be applied. For example, if you declare the style in the root element of your app definition XAML file, the style can be used anywhere in your app. If you declare the style in one of the app's XAML files, the style can be used only in that XAML file.

How do I change the startup window in WPF?

If you look at App. xaml class of your WPF application, you will see the following XAML code. Here the StartupUri sets the startup Window of an application. If you want to change the Startup window to some other window, just change this value.

How do I display a WPF window?

When a Window is created at run-time using the Window object, it is not visible by default. To make it visible, we can use Show or ShowDialog method. Show method of Window class is responsible for displaying a window.

Is WPF still in demand?

WPF is still one of the most used app frameworks in use on Windows (right behind WinForms).


1 Answers

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.

like image 116
Gishu Avatar answered Sep 18 '22 06:09

Gishu