我已设法确定封锁是打开还是关闭,以便我可以显示正确的错误消息。但是,如果在文本框获得焦点时封锁已关闭,则我的代码才有效。但是如果它打开,则不应出现错误消息。
private Boolean CapsLock = false; //here...how to determine if it is on or off propperly
private void loginCredentials_KeyUp(object sender, KeyRoutedEventArgs e)
{
switch (e.Key.GetHashCode())
{
//...
case 20:
CapsLock = (CapsLock) ? false : true;
errorMessage.Text = (CapsLock) ? ((App)(App.Current)).loader.GetString("capslockError") : String.Empty;
break;
}
}
答案 0 :(得分:2)
查找当前密钥状态的WinRT方法为GetKeyState
,因此您可以根据需要直接检查密钥值(类似于评论中提到的IsKeyLocked
)。
我注意到打开按键的哈希码似乎是错误的,你应该根据VirtualKey
枚举中的代码检查键值本身(我猜你已经注意到哈希码只是这个值,意味着它有效。)
如果您确实需要立即知道何时按下大写锁等键,而不仅仅是在文本字段具有焦点时,您可以在应用程序根目录上注册键处理程序。通常情况下,按键将由控件(如处理它们的文本框)使用,但您可以使用带有AddHandler
参数的true
来收听所有按键操作,包括处理的按键,例如:
Window.Current.AddHandler(UIElement.KeyUpEvent, new KeyEventHandler(...), true);
或者使用Window.Current.CoreWindow.KeyUp
事件。