tags:

views:

1574

answers:

1

In HTML/CSS you can define a style which can be applied to many types of elements, e.g.:

.highlight {
    color:red;
}

can be applied to both P and DIV, e.g.:

<p class="highlight">this will be highlighted</p>
<div class="highlight">this will also be highlighted</div>

but in XAML you seem to have to define the TargetType for styles, otherwise you get an error:

<Style x:Key="formRowLabel" TargetType="TextBlock">

is there a way to allow a XAML style to be applied to multiple elements or even to leave it open as in CSS?

+3  A: 

The setters in WPF styles are checked during compile time; CSS styles are applied dynamically.

You have to specify a type so that WPF can resolve the properties in the setters to the dependency properties of that type.

You can set the target type to base classes that contain the properties you want and then apply that style to derived classes. For example, you could create a style for Control objects and then apply it to multiple types of controls (Button, TextBox, CheckBox, etc)

<Style x:Key="Highlight" TargetType="{x:Type Control}">
    <Setter Property="Foreground" Value="Red"/>
</Style>

...

<Button Style="{StaticResource Highlight}" Content="Test"/>
<TextBox Style="{StaticResource Highlight}" Text="Test"/>
<CheckBox Style="{StaticResource Highlight}" Content="Test"/>
Josh G
Yes but what if you wish to apply it to Buttons and Textboxes but not Checkboxes?
emddudley
You can apply it to whatever you wish. This style must be applied to controls. If will only be applied to ALL controls if you remove the 'x:Key="Highlight"'. If you don't want it applied to CheckBoxes, leave off the 'Style=' property.
Josh G
Clarification: Remove 'x:Key="Highlight"' from the Style definition to apply the Style to ALL instances of that type. With the key, remove the 'Style="{StaticResource Highlight}"' from the control to remove the Style from that control.
Josh G