0

我有一个 wpf 数据网格。我添加了样式以在一行上显示鼠标悬停颜色。

我想要实现的是当鼠标悬停出现时,用户开始使用箭头键上下导航,鼠标悬停需要消失,只有用户使用箭头键到达的行是突出显示的行。

问题是当用户使用箭头键导航时,鼠标光标一直留在网格上,并且光标下的行保持突出显示以及使用箭头转到的行。

这是我的示例 xmal:

<DataGrid AutoGenerateColumns="True" Height="277" HorizontalAlignment="Left" Margin="0,311,0,0" Name="dataGrid1" 
          VerticalAlignment="Top" 
          Width="478" ItemsSource="{Binding Path=Persons}" 
          RowHeight="20" 
          RowHeaderWidth="35" Grid.ColumnSpan="2" >
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Style.Triggers>
                <Trigger Property="IsMouseOver"
                   Value="True">
                    <Setter Property="Background"
                       Value="Green" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
</DataGrid>

谢谢

4

2 回答 2

1

当用户按下箭头键时,您需要设置某种标志,以便背景仅在IsMouseOverIsUsingArrowKeysfalse 时更改。您甚至可以使用鼠标可见性作为条件而不是使用标志

我不确定确切的语法,但应该是这样的

<Style.Triggers>
    <MultiDataTrigger>
        <MultiDataTrigger.Conditions>
            <!-- May need to reference RelativeSource here, not sure -->
            <Condition Property="IsMouseOver" Value="False" />
            <Condition Binding="{Binding IsUsingArrowKeys}" Value="False" />
        </MultiDataTrigger.Conditions>
        <Setter Property="Background" Value="Green" />
    </MultiDataTrigger>
</Style.Triggers>
于 2011-09-27T19:08:19.283 回答
0

我建议根据他们的焦点触发器突出显示该行。

像这样的东西:

<EventTrigger RoutedEvent="GotFocus"> 
 <EventTrigger.Actions>
   <BeginStoryboard>
     <Storyboard>
       <DoubleAnimation Storyboard.TargetName="dataGrid1" Storyboard.TargetProperty="Background" Duration="0:0:0.1" To="Green"/>
     </Storyboard>
   </BeginStoryboard>
 </EventTrigger.Actions> 
</EventTrigger>
<EventTrigger RoutedEvent="LostFocus"> 
 <EventTrigger.Actions>
  <BeginStoryboard>
    <Storyboard>
      <DoubleAnimation Storyboard.TargetName="dataGrid1" Storyboard.TargetProperty="Background" Duration="0:0:0.1" To="White"/>
    </Storyboard>
  </BeginStoryboard>
 </EventTrigger.Actions>
</EventTrigger>

并手动关注它们,如下所示:

private void Btn_Click(object sender, RoutedEventArgs e)
        {
            dataGrid1.Focus();
        }

因此,当另一行获得焦点时,当前行失去焦点并自动回退到非突出显示的颜色背景。

于 2011-09-27T19:12:48.650 回答