将 Enter 解释为带有选择的 Tab
Interpret Enter as Tab with selection
我在 Enter 按键上使用此代码将焦点移动到下一个,就像 Tab 在数据网格中所做的那样。
uiElement.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
在任意行的末尾按 Enter 会将焦点移动到下一行,但选择保持在原来的位置。另一方面,使用 Tab 使选择成为焦点。
有没有办法通过一些调整来移动选择?
马特·汉密尔顿的 answer 很棒,但没有进行选择。
您可以做的不是尝试以编程方式切换焦点,而是模拟每次在 DataGrid
中按下回车键时按下 Tab 键。它看起来像这样:
private void DataGrid_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
var dataGrid = (DataGrid)sender;
var keyEventArgs = new KeyEventArgs(Keyboard.PrimaryDevice, PresentationSource.FromVisual(dataGrid), 0, Key.Tab)
{
RoutedEvent = Keyboard.KeyDownEvent,
};
dataGrid.RaiseEvent(keyEventArgs);
e.Handled = true;
}
}
我在 Enter 按键上使用此代码将焦点移动到下一个,就像 Tab 在数据网格中所做的那样。
uiElement.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
在任意行的末尾按 Enter 会将焦点移动到下一行,但选择保持在原来的位置。另一方面,使用 Tab 使选择成为焦点。
有没有办法通过一些调整来移动选择?
马特·汉密尔顿的 answer 很棒,但没有进行选择。
您可以做的不是尝试以编程方式切换焦点,而是模拟每次在 DataGrid
中按下回车键时按下 Tab 键。它看起来像这样:
private void DataGrid_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
var dataGrid = (DataGrid)sender;
var keyEventArgs = new KeyEventArgs(Keyboard.PrimaryDevice, PresentationSource.FromVisual(dataGrid), 0, Key.Tab)
{
RoutedEvent = Keyboard.KeyDownEvent,
};
dataGrid.RaiseEvent(keyEventArgs);
e.Handled = true;
}
}