Just playing around with Silverlight a bit and trying to set a style to apply to all TextBlocks. The following XAML:
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Margin" Value="10, 10, 10, 10" />
</Style>
Gives me the error Invalid attribute value {x:Type TextBlock} for property TargetType.
I copied and pasted this bit from the MSDN so I'm a little lost as to why I'm getting this error.
EDIT:
Here's the full code I'm attempting now:
<UserControl x:Class="NIRC.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="300">
<UserControl.Resources>
<Style TargetType="TextBlock">
<Setter Property="Margin" Value="10" />
<Setter Property="Foreground" Value="Red" />
</Style>
</UserControl.Resources>
<TextBlock>Hello World!</TextBlock>
</UserControl>
Here's how it looks:
Value of TargetType change to TextBlock only. It should work.
Optionally, give it x:Key and the value of this attribute use in your TextBlock as StaticResource.
Silverlight does not support implicit styling via generic Styles (i.e. with a TargetType but without a static resource key - x:Key="") but WPF does.
You need to explicitly apply Styles using StaticResource references on each instance of your element that you want styled using Style="{StaticResource stylename}".
The Silverlight toolkit has an Implicit Style Manager (ISM) that gets around this by wrapping Silverlight markup and applying styles from ResourceDictionaries by parsing the content.
Since what you are trying to do is implicit styling, so far Gordon's answer seems the right one: "Silverlight does not support implicit styling via generic Styles (i.e. with a TargetType but without a static resource key - x:Key="") but WPF does."
However implicit styles will work with Silverlight 4. See http://www.silverlightshow.net/items/Implicit-Styles-in-Silverlight-4.aspx
Hmm, the following should work and cascade to all textblocks in the usercontrol element.
Edit:
Is
NIRC.Page
the correct codebehind for the usercontrol?I wish I knew what was wrong, the following works perfect for me in a user control.
Result is red text with a margin of 10px on all sides.
Yeah, Silverlight 4 lets you do implicit styles now, you just need to do what Quinton says and just set the TargetType without a key, and you're good to go. Put it in the App.xaml and it should propogate the style to all controls in the app.
If you don't want to set
Style
each time you use your control, you can set it in your constructor code: