I have a simple WPF window that has 12 buttons on it. I want the same style to be applied to all of them. This code produces the same error:
I've seen this problem a couple of times before and it's a pretty weird "bug". It happends when you put a Style
directly in a ResourceDictionary
inside <ResourceDictionary.MergedDictionaries>
. The Style
is skipped for the first item. This code produces the same result, the Style is skipped for the first ListBoxItem
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Foreground" Value="Green"/>
</Style>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<ListBox>
<ListBoxItem Content="Item 1"/>
<ListBoxItem Content="Item 2"/>
<ListBoxItem Content="Item 3"/>
</ListBox>
To get both the styles and MergedDictionaries to work, do it like this instead
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Resources/AllResources.xaml"/>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="{x:Type Button}">
<Setter Property="FontSize" Value="100"/>
</Style>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Content="1" Name="Button1"/>
<Button Grid.Column="1" Content="2" Name="Button2"/>
</Grid>
Although it does not produce an error, according to the documentation:
a dictionary used in merged dictionaries should not have content and should use the Source
property to refer to another dictionary indirectly. In fact if you put the Style
in a resource dictionary and reference both of them in the merge, it works as it should.
We can only speculate why this is not supported but since it isn't, and since the workaround is easy, we can't complain too bitterly except to wish that we received an error at compile time.