Setting the style of a WPF UserControl

Viewed 27397

I know I can set the style of a UserControl like so in the control by adding an attribute:

Style="{StaticResource MyStyle}"

And having a style in my ResourceDictionary that looks something like the following:

<Style x:Key="MyStyle" TargetType="{x:Type UserControl}">
    <Style.Resources>
        <Style TargetType="Label">
            <!-- Label Setters -->
        </Style>
        <Style TargetType="TextBox">
            <!-- TextBox Setters -->
        </Style>
    </Style.Resources>
</Style>

But is there a way I can set the style of the UserControl in the ResourceDictionary directly like:

<Style x:Key="MyStyle" TargetType="{x:Type MyControl}">

Essentially my question is, can I apply the style directly to the control instead of to the controls components?

EDIT: What I am trying to accomplish is something like the following:

<Style x:Key="MyStyle" TargetType="{x:Type MyControl}">
    <Setter Property="Background" Value="Black"/>
</Style>
<Style x:Key="{x:Type MyControl}" TargetType="{x:Type MyControl}" BasedOn="{StaticResource MyStyle}"/>

Where the second line applies the style to all controls in the application, if you do something similar with a normal control this approach works.

However this only sets the Background of the UserControl, so how can I apply that same background to its components.

How can I do it with the UserControl?

5 Answers

Necro answer for a special case. If the user control is selected via a DataTemplate resource in another WPF control or window, WPF may not automagically apply a default style from an imported resource dictionary. However, you can apply named style resource after importing a resource dictionary.

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="../../Resources/ResourceDictionary.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>
<UserControl.Style>
    <Binding Source="{StaticResource MyUserControlStyle}"></Binding>
</UserControl.Style>
Related