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

时间:2011-08-10 05:32:22

标签: wpf listview styles listviewitem

我有一个简单的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,即使该行的某个区域碰巧是空的。有关如何解决这个问题的想法吗?

1 个答案:

答案 0 :(得分:1)

将边框Horizo​​ntalAlignment设置为Stretch并为其指定透明(或其他默认)背景。这将使鼠标有些东西要突出显示