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

ユーザーが矢印キーを押したときに何らかのフラグを設定して、falseの場合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>
于 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 に答える