WPF doesn't apply style to first element WPF doesn't apply style to first element wpf wpf

WPF doesn't apply style to first element


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.