如何根据应用程序的Ctrl键状态(按下或未按下)更改UI状态?



我想改变一些按钮替代功能随着不同的名称,当按下Ctrl和按住Ctrl时,恢复到原始状态。

我尝试在主页上添加KeyUp, KeyDown和PreviewKeyUp。

private void OnKeyDown(object sender, KeyRoutedEventArgs e)
{
Debug.Log($"MainPage.OnKeyDown( {e.Key} ) ");
}

但是它不会被触发,除非我的鼠标聚焦在一个文本框上

我应该使用DispatchTimer来主动监控Control键状态吗?但这听起来不像是一个好方法。

您可以使用CoreWindow-events。它们在窗口有活动焦点时被处理。

Window.Current.CoreWindow.KeyDown += CoreWindow_Pressed;
Window.Current.CoreWindow.KeyUp += CoreWindow_Pressed;
bool ControlHoldDown = false;
private void CoreWindow_Pressed(CoreWindow sender, KeyEventArgs args)
{
ControlHoldDown = CoreWindow.GetForCurrentThread().GetKeyState(VirtualKey.Control).HasFlag(CoreVirtualKeyStates.Down);
Debug.WriteLine("CTRL: " + ControlHoldDown);
}