【问题标题】:UWP key press event handled too late prevent keyboard focus actionUWP 按键事件处理得太晚阻止键盘焦点操作
【发布时间】:2015-12-14 23:43:34
【问题描述】:

我有一个控制我的电视的 UWP 应用。我有一些按钮、复选框等和键盘控件/事件。这种组合会导致问题。选中复选框时,然后按VirtualKey.stract未选中复选框,我不希望通过键盘进行任何更改。使用 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 平台)是不同的。

【问题讨论】:

    标签: c# uwp keyboard-events keyboardfocusmanager


    【解决方案1】:

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

    public sealed partial class MyCheckBox : CheckBox
    {
        public MyCheckBox()
        {
            this.InitializeComponent();
        }
    
        protected override void OnKeyDown(KeyRoutedEventArgs e)
        {
            e.Handled = true;
            //your logic
        }
    }
    

    【讨论】:

    • 正是我需要的! InitializeComponent 东西不会编译,但不是必需的。添加类后重新启动 VisualStudio 也是有意义的,否则 GUI 不知道新元素。可以在 xaml 中用作
    猜你喜欢
    • 2019-06-16
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    相关资源
    最近更新 更多