大量のデータを表示するためにDataGridを使用しています。と がSelectionMode="Extended"
ありSelectionUnit="FullRow"
ます。
私ができるようにしたいのは、 を押しJ
てグリッド内でフォーカスを下にK
移動し、 を押してグリッド内を上に移動し、 を押してフォーカスされたx
行をリストに追加/リストから削除することですSelectedItems
(基本的には gmail のようにキーボード ショートカットはオン)
私は wpf にかなり慣れていますが、まだこれを達成できていません。行のフォーカスが選択したアイテムとは別のものかどうかはわかりませんが、一体何者かがここで似たようなことをしたのかもしれません。
これが私がこれまでに試したことです
case Key.X:
{
resultsGrid.SelectedItems.Add(resultsGrid.SelectedItem);
e.Handled = true;
break;
}
case Key.J:
{
//down
var currow = (DataGridRow) resultsGrid.ItemContainerGenerator.ContainerFromItem(resultsGrid.SelectedItem);
currow.MoveFocus(new TraversalRequest(FocusNavigationDirection.Down));
//if (resultsGrid.SelectedIndex + 1 >= resultsGrid.Items.Count)
// resultsGrid.SelectedIndex = 0;
//else
// resultsGrid.SelectedIndex++;
break;
}
case Key.K:
{
//up
var currow =
(DataGridRow) resultsGrid.ItemContainerGenerator.ContainerFromItem(resultsGrid.SelectedItem);
currow.MoveFocus(new TraversalRequest(FocusNavigationDirection.Up));
//if (resultsGrid.SelectedIndex - 1 <= 0)
// resultsGrid.SelectedIndex = resultsGrid.Items.Count - 1;
//else
// resultsGrid.SelectedIndex--;
break;
}
現在、現在の行は上下に移動しません。私も試してみましたがFocusNavigationDirection.Previous
、Next
それらもフォーカスを動かしません。インデックスで移動すると移動しますが、X を押しても選択した項目のリストに追加されません。シフトと上下を使用するか、マウスをシフトしてクリックするまで、複数選択が開始されないようです
編集
わかりましたので、キーj
とk
キーを使用して移動する方法を理解しましたが、選択はまだ機能していません。上下に移動すると、選択がクリアされますx
。少なくとも視覚的には、押しても何も起こりません。
case Key.X:
resultsGrid.SelectedItems.Add(resultsGrid.SelectedItem);
e.Handled = true;
break;
case Key.J:
{
//down
InputManager.Current.ProcessInput(new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.Down)
{
RoutedEvent = Keyboard.KeyDownEvent
});
resultsGrid.ScrollIntoView(resultsGrid.SelectedItem);
e.Handled = true;
break;
}
case Key.K:
{
//up
InputManager.Current.ProcessInput(new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.Up)
{
RoutedEvent = Keyboard.KeyDownEvent
});
resultsGrid.ScrollIntoView(resultsGrid.SelectedItem);
e.Handled = true;
break;
}