UWP按键事件处理太晚会阻止键盘焦点动作

时间:2015-12-13 03:53:37

标签: c# uwp keyboard-events keyboardfocusmanager

我有一个控制我的电视的UWP应用程序。我有一些按钮,复选框等和键盘控制/事件。这种组合会导致问题。选中一个复选框然后按VirtualKey.Subtract时,复选框未选中,我不希望通过键盘进行任何更改。使用e.Handled似乎不起作用。

如何在UWP App中禁用默认键盘导航行为或键盘焦点?

private async void Page_Loaded(object sender, RoutedEventArgs e)
{
    Window.Current.CoreWindow.KeyDown += KeyEventHandler;
    Window.Current.CoreWindow.KeyUp += KeyEventHandlerDevNull;
}

private void KeyEventHandlerDevNull(CoreWindow sender, KeyEventArgs e)
{
    e.Handled = true;
}

private async void KeyEventHandler(CoreWindow sender, KeyEventArgs e)
{
    e.Handled = true; //gets unset in case of default

    if (MainViewModel.ControlsEnabled)
    {
        switch (e.VirtualKey)
        {
            case VirtualKey.Left:
                await ButtonPressLeft();
                break;
            case VirtualKey.Right:
                await ButtonPressRight();
                break;
            default:
                e.Handled = false;
                break;
        }
    }
}

很抱歉,如果这个问题可能重复,但我认为它与UWP(通用Windows平台)不同。

1 个答案:

答案 0 :(得分:1)

您需要实施/使用自定义复选框并覆盖OnKeyDown事件以防止更改复选框。

public sealed partial class MyCheckBox : CheckBox
{
    public MyCheckBox()
    {
        this.InitializeComponent();
    }

    protected override void OnKeyDown(KeyRoutedEventArgs e)
    {
        e.Handled = true;
        //your logic
    }
}