WPF ListViewItem.IsMouseOver不会对整行返回True



我有一个定义了两列的简单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,并给它一个透明的(或默认的)背景。这样鼠标就可以在

上高亮显示

相关内容

  • 没有找到相关文章

最新更新