我有一个简单的WPF ListView
,其中定义了两列。默认情况下,当您将鼠标移动到行的任何部分时,它将在跟踪外观中显示该行(我使用的是带有Aero的Windows 7)。下面是一个简单示例的Xaml,显示了这个按预期工作......
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Grid>
<ListView>
<ListView.View>
<GridView>
<GridViewColumn Header="First" Width="200"/>
<GridViewColumn Header="Second" Width="200"/>
</GridView>
</ListView.View>
<sys:DateTime>1/2/3</sys:DateTime>
<sys:DateTime>4/5/6</sys:DateTime>
<sys:DateTime>7/8/9</sys:DateTime>
<sys:DateTime>10/11/12</sys:DateTime>
</ListView>
</Grid>
</Page>
我想覆盖ListViewItem
样式并在跟踪时自定义行的外观。以下是我添加到上述ListView
...
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border x:Name="Bd">
<GridViewRowPresenter />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Bd" Property="Background" Value="Red"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
当鼠标直接位于两列中的一列内的文本上时,它仅将行显示为跟踪。如果鼠标位于绘制的文本之间或在最后一列之外的右侧,则它不会显示为跟踪。
如果鼠标下有实际内容,IsMouseOver
触发器似乎只返回True,如果鼠标位于行的任何部分上,我希望它返回True,即使该行的某个区域碰巧是空的。有关如何解决这个问题的想法吗?
答案 0 :(得分:1)
将边框HorizontalAlignment设置为Stretch并为其指定透明(或其他默认)背景。这将使鼠标有些东西要突出显示