wpf ListView DataTemplate方式的鼠标悬停和选中更改背景色

本文介绍了在WPF中使用ListView时,如何通过DataTemplate方式定义不同数据模板,并在鼠标悬停和选中时自定义背景色。作者指出,ListView内的ListViewItems需要设置BorderThickness和Padding为0,然后在DataTemplate中设置背景色。需要注意的是,在使用DataTemplateSelector时,不应在ItemContainerStyle中设置Template,否则会导致DataTemplate失效,影响数据显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         今天使用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"<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值