What is the recommended way to skin an entire application in WPF?

15,118

Solution 1

The basic approach to take is using resources all through your application and dynamically replacing the resources at runtime.

See http://www.nablasoft.com/alkampfer/index.php/2008/05/22/simple-skinnable-and-theme-management-in-wpf-user-interface/ for the basic approach

Solution 2

The replacing of resource will work but I found "structural skinning" to be more powerfull! Read more about it on CodeProject...

http://www.codeproject.com/KB/WPF/podder1.aspx

Solution 3

I have found the way to apply generic templates to all controls without using template keys. The solution is to use the type of the control as the Style key.

Example:

 <Application.Resources>
    <Style x:Key="{x:Type Button}" TargetType="{x:Type Button}">
        <Setter Property="Button.Background" Value="CornflowerBlue"/>
        <Setter Property="Button.Template">
            <Setter.Value>
                <ControlTemplate x:Name="MyTemplate">
                    ...
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Application.Resources>

here the Style key is x:Key="{x:Type Button}", so the style will be applied to all controls of type button without the control declaring the Style property to be a static or dynamic resource.

Share:
15,118
Pop Catalin
Author by

Pop Catalin

Think more - code less, or think less - code more?

Updated on June 16, 2022

Comments

  • Pop Catalin
    Pop Catalin almost 2 years

    I want my WPF application to be skinnable, by applying a certain XAML template, and the changes to be application wide, even for dynamic controls or controls that aren't even in the visual/logical tree.

    What can I use to accomplish this type of functionality? Are there any good resources or tutorials that show how this specific task can be done?