用于UWP DataGrid的Telerik UI输入密钥

时间:2018-11-07 05:59:38

标签: uwp telerik-grid

我正在使用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;

1 个答案:

答案 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事件处理程序中设置焦点。