今天使用wpf技术弄一个ListView的时候,由于需求需要,需要ListView显示不同的数据模板,很自然的使用了DataTemplate方式来定义多个数据模板,并在ListView中使用ItemTemplateSelector绑定模板。添加上数据源显示后数据显示根据数据的类型不同显示了不同的数据模板,这很符合我的需求,但是当我把鼠标悬停到ListView和选中一行数据时,惊讶的发现ListView还是显示自带的背景色,简直丑哭了,不能忍,我要自定义鼠标悬停和选中的背景色。
通过一上午的忙碌才发现,原来ListView里是由多个ListViewItem包含DataTemplate方式来显示数据的,因此我们需要先设置ListViewItem的BorderThickness和Padding大小为0,再接着DataTemplate设置为背景色。实现代码如下:


1 <DataTemplate x:Key="MessageDataTemplateLeft"> 2 3 <Grid x:Name="messageGrid" > 4 <Grid.Resources> 5 <Common:ConcatImageExtensionConverter x:Key="ConcatImageExtensionConverter"/> 6 </Grid.Resources> 7 <Grid.RowDefinitions> 8 <RowDefinition Height="auto"/> 9 </Grid.RowDefinitions> 10 <Grid.ColumnDefinitions> 11 <ColumnDefinition Width="auto"/> 12 <ColumnDefinition Width="*"/> 13 </Grid.ColumnDefinitions> 14 <Grid Grid.Row="0" Grid.Column="0"> 15 <Ellipse Width="45" Height="45"> 16 <Ellipse.Fill> 17 <ImageBrush ImageSource="{Binding Path=FromMailAccount,Converter={StaticResource ConcatImageExtensionConverter}}"></ImageBrush> 18 </Ellipse.Fill> 19 </Ellipse> 20 </Grid> 21 <Grid Grid.Row="0" Grid.Column="1"> 22 <Border Margin="10,0,40,0" Background="#00CD00" CornerRadius="10" HorizontalAlignment="Left"> 23 <TextBlock TextWrapping="Wrap"<