我有一个定义了两列的简单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
的示例Xaml…
<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时,如果鼠标在行的任何部分上,即使行的那个区域恰好是空的。有办法解决这个问题吗?
设置边框的HorizontalAlignment为Stretch,并给它一个透明的(或默认的)背景。这样鼠标就可以在