1

我已经设法确定大写锁定是打开还是关闭,以便我可以显示正确的错误消息。但是我的代码只有在文本框获得焦点时关闭大写锁定时才有效。但如果它打开,则错误消息会在不应该出现的时候出现。

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;
    }
}
4

1 回答 1

2

WinRT 查找当前键状态的方法是GetKeyState,所以如果需要可以直接查看键值(类似于IsKeyLocked注释中提到的)。

我注意到打开按键的哈希码似乎是错误的,您应该根据VirtualKey枚举中的代码检查键值本身(我猜您已经注意到哈希码就是这个值,这意味着它可以工作) .

如果您确实需要立即知道何时按下大写锁定等键,而不仅仅是当您的文本字段具有焦点时,您可以在应用程序根视觉对象上注册一个键处理程序。通常按键将被处理它们的文本框等控件使用,但您可以使用AddHandlerwithtrue参数来监听所有按键,包括已处理的按键,例如:

Window.Current.AddHandler(UIElement.KeyUpEvent, new KeyEventHandler(...), true);

或者使用Window.Current.CoreWindow.KeyUp事件。

于 2014-02-06T11:59:05.443 回答