我有一个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>
由于
答案 0 :(得分:1)
当用户点击箭头键时,您需要设置某种标记,以便仅在IsMouseOver
和IsUsingArrowKeys
为假时才会更改背景。您甚至可以使用鼠标可见性作为条件而不是使用标记
我不是肯定的确切语法,但它应该是这样的
<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>
答案 1 :(得分: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();
}
因此当另一行获得焦点时,当前行失去焦点&amp;自动回退到非突出显示的颜色背景。