UWP 按键事件处理得太晚阻止键盘焦点操作

UWP key press event handled too late prevent keyboard focus action

我有一个 UWP 应用程序可以控制我的电视。我有一些按钮、复选框等和键盘 controls/events。这种组合会导致问题。当检查复选框时,然后按VirtualKey.Subtract未选中复选框,我不希望通过键盘进行任何更改。使用e.Handled好像不行。

如何禁用 UWP 应用程序中的默认键盘导航行为或键盘焦点?

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 平台)有所不同。

您需要implement/use您的自定义复选框并覆盖 OnKeyDown 事件以防止更改您的复选框。

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

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