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
}
}
我有一个 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
}
}