WPF ListViewItem.IsMouseOver не возвращает True для всей строки - PullRequest
2 голосов
/ 10 августа 2011

У меня есть простой WPF ListView с двумя определенными столбцами. По умолчанию при наведении курсора мыши на любую часть строки эта строка отображается в виде отслеживания (я использую Windows 7 с Aero). Вот 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 и настроить внешний вид строки при отслеживании. Вот пример Xaml, который я добавил к вышеупомянутому 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, если мышь находится над какой-либо частью строки, даже если эта область строки быть пустым Есть идеи, как это решить?

1 Ответ

1 голос
/ 10 августа 2011

Установите границу HorizontalAlignment на Stretch и задайте ей прозрачный (или по умолчанию) фон.это даст мышке кое-что для выделения

...