我正在使用Telerik Datagrid For UWP。我正在使用PreviewKeyDown
捕获 Enter 键。我想在按下 Enter 键时将焦点设置到另一个控件上。
private async void bookingGrid_PreviewKeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key==Windows.System.VirtualKey.Enter)
{
//the methodfires but focus does not shift to the required control
await FocusManager.TryFocusAsync(anotherControl, FocusState.Keyboard);
// this does not focus the other control??
}
}
其他键工作正常,但 Enter 键无效。我已经尝试过
e.Handled = true;
和
e.Handled = false;
答案 0 :(得分:1)
问题可能是您设置e.Handled = true
的时间太晚。
到达await
时,系统基本上停止了事件处理程序的执行,因此,如果在Handled
之后设置await
,它将不会被事件处理程序接收。系统,它将继续执行KeyDown
,这很可能会阻止将焦点设置到另一个控件并将其保留在DataGrid
中。
您需要做的是在更改焦点之前设置Handled
:
private async void bookingGrid_PreviewKeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key==Windows.System.VirtualKey.Enter)
{
e.Handled = true;
await FocusManager.TryFocusAsync(anotherControl, FocusState.Keyboard);
}
}
另一种解决方案是通过按 Enter 键控制过程并在KeyUp
事件处理程序中设置焦点。