我在这里需要一些帮助。我不明白为什么我找到的解决方案都不适用于我的案例。让我们考虑一个包含以下项目的列表视图:
<ListView.Items>
<ListViewItem>
<TextBlock xml:space="preserve"> 1 <Bold>I'm bold</Bold> </TextBlock>
</ListViewItem>
<ListViewItem>
<TextBlock xml:space="preserve"> 2 Im not </TextBlock>
</ListViewItem>
</ListView.Items>
一开始在每一行上悬停时,我看到TextBlock的高亮显示是默认的浅蓝色,它只在文本区域加了下划线:
我不想要高亮显示,我想要整行高亮显示,我想要决定颜色。我还想要在选择时整行高亮显示:
我一直在玩Styles、Triggers或者ItemContainerStyle。我意识到我必须考虑Textbox的背景,以及ListViewItem中有文本的区域的背景。而整行的背景似乎是ListView.ItemContainerStyle的业务。
为TextBox添加样式的结果:
<Style x:Key="TextBlockStyle" TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Black" />
<Setter Property="Background" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
<ListView Grid.Column="1" Margin="0" HorizontalContentAlignment="Stretch" BorderThickness="0" >
<ListView.Resources>
<Style BasedOn="{StaticResource TextBlockStyle}" TargetType="{x:Type TextBlock}" />
</ListView.Resources>
为:
然后我添加另一个样式来尝试摆脱TextBox下面的ListView背景:
<Style x:Key="ListViewItemStyle" TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Gold" />
</Trigger>
</Style.Triggers>
</Style>
<ListView Grid.Column="1" Margin="0" HorizontalContentAlignment="Stretch" BorderThickness="0" >
<ListView.Resources>
<Style BasedOn="{StaticResource TextBlockStyle}" TargetType="{x:Type TextBlock}" />
<Style BasedOn="{StaticResource ListViewItemStyle}" TargetType="{x:Type ListViewItem}" />
</ListView.Resources>
但这一点效果都没有。
尝试用以下方式突出显示整行是行不通的:
<ItemsControl.ItemContainerStyle>
<Style>
<Style.Triggers>
<Trigger Property="Control.IsMouseOver" Value="True">
<Setter Property="Control.Background" Value="Gold" />
</Trigger>
</Style.Triggers>
</Style>
</ItemsControl.ItemContainerStyle>
几个小时后,我又尝试了其他几个建议。Remove the mouse over effect on a ListView in WPF避免了文本框和ListViewItem在悬停时高亮显示,但我不知道如何更改整行的背景。有人能提供一个例子来说明我正在尝试做什么吗?
4条答案
按热度按时间pwuypxnk1#
查看和更改给定元素的所有样式选项的最简单方法是导出控件的默认模板。
Therefore open Visual Studio or Blend and Right Click in the Design View on a control. Hover to 'Edit Template' -> And select 'Edit a Copy...'输出:
现在您有了一个很好的起点来定制ItemContainerStyle。
zc0qhyus2#
试试这个:
ndasle7k3#
您可以参考我的项目中使用的代码(
DataGrid
),我认为ListView
也是如此:x3naxklr4#
下面的样式允许您在鼠标悬停时更改ListViewItem的背景颜色。
查看和编辑给定控件的所有样式选项的最简单方法是导出控件的默认模板。依次单击控件、“属性”、“杂项”、“ItemContainerStyle”、向下箭头、“转换为新资源”。
不过,问题是这不适用于ListView,但适用于共享相同样式的ListBox。要解决此问题,请将ListBox添加到xaml并使用它生成样式。您可以将ListBox的所有示例更改为导出样式中的ListView,但这不会有任何区别。