[WPF] ListView losing GridView display when applying custom ItemContainerStyle
Hi,
I have a ListView with its View set to a GridView, with some GridViewColumns defined. Basically I want it to look like a normal ListView on windows 7.
Unfortunately, even on windows 7 itself, the default colors of the selection highlights are slightly wrong. Furthermore I also want the ListView to look like a windows 7 ListView when not running on windows 7. Long story short: I want to supply a custom style to the items to get them to look like the windows 7 items.
This is the XAML and how the listview looks without any styling applied (on windows 7):
Code:
<ListView ItemsSource="{Binding Series.ServiceSeries.Weeks}">
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn Header="" DisplayMemberBinding="{Binding WeekNumber}" />
<GridViewColumn Header="Start date" DisplayMemberBinding="{Binding Path=., Converter={StaticResource WeekConverter}, ConverterParameter=start}" />
<GridViewColumn Header="Track" DisplayMemberBinding="{Binding Path=., Converter={StaticResource WeekConverter}, ConverterParameter=track}" />
<GridViewColumn Header="Race length" DisplayMemberBinding="{Binding Path=., Converter={StaticResource WeekConverter}, ConverterParameter=length}" />
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
The colors look way different in my opinion:
http://www.nickthissen.nl/Images/Persistent/tmp3DCB.png
As soon as I add an ItemContainerStyle however, the listview looks like this:
http://www.nickthissen.nl/Images/Persistent/tmpCCB2.png
As you can see, the colors now match the windows 7 style much better, but the GridView look has disappeared and instead of using the columns, the objects are just shown by their string representation (which I did not implement, so it shows the full type name).
This is the style (omitted the colors for brevity, if you really want them I can add them):
Code:
<Style TargetType="{x:Type ListViewItem}" x:Key="ListViewItemStyle">
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<Border x:Name="Border" CornerRadius="3" BorderThickness="1" SnapsToDevicePixels="True">
<Border x:Name="InnerBorder" CornerRadius="2" BorderBrush="Transparent" Background="Transparent"
BorderThickness="1" Padding="3,1" SnapsToDevicePixels="True">
<ContentPresenter />
</Border>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Border" Property="BorderBrush"
Value="{StaticResource ListboxItemHoverBorder}" />
<Setter TargetName="InnerBorder" Property="BorderBrush"
Value="{StaticResource ListboxItemHoverInnerBorder}" />
<Setter TargetName="InnerBorder" Property="Background"
Value="{StaticResource ListboxItemHoverBackground}" />
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="Border" Property="BorderBrush"
Value="{StaticResource ListboxItemSelectedBorder}" />
<Setter TargetName="InnerBorder" Property="BorderBrush"
Value="{StaticResource ListboxItemSelectedInnerBorder}" />
<Setter TargetName="InnerBorder" Property="Background"
Value="{StaticResource ListboxItemSelectedBackground}" />
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="true" />
<Condition Property="Selector.IsSelectionActive" Value="false" />
</MultiTrigger.Conditions>
<Setter TargetName="Border" Property="BorderBrush"
Value="{StaticResource ListboxItemInactiveBorder}" />
<Setter TargetName="InnerBorder" Property="BorderBrush"
Value="{StaticResource ListboxItemInactiveInnerBorder}" />
<Setter TargetName="InnerBorder" Property="Background"
Value="{StaticResource ListboxItemInactiveBackground}" />
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Any idea's what could cause this? How should I apply this style properly? The style is actually exactly the same as the style I'm using for a ListBox, (except the target type set to ListBoxItem), and I did this because some samples online did the same thing and it seemed to work for them...
Thanks!