gpt4 book ai didi

c# - 在 Silverlight 中检测 CapsLock 是打开还是关闭

转载 作者:行者123 更新时间:2023-11-30 14:01:51 25 4
gpt4 key购买 nike

您可能会发现是否已按下 CapsLock 键订阅 KeyDown/KeyUp 事件。然后根据该输入切换 CapsLock 的状态。这种方法的问题是您需要 CapsLock 键的初始状态才能开始切换它。

这方面的一个应用可能是在登录页面上向用户发出通知(这正是我所需要的)。

顺便说一句,我使用的是 Silverlight 5。

编辑

发布的解决方案here说:

You can however find out if Capslock is on by making use of KeyEventArgs.PlatformKeyCode that's actually send at onKeyDown.You can look up the Virtual Key-code for capslock in here: http://msdn.microsoft.com/en-us/library/ms927178.aspx

使用此解决方案,您无法确定 CapsLock 状态,因为 KeyEventArgs.PlatformKeyCode 返回“表示按下或释放的键的整数值(取决于引发的事件)”。因此,如果 CapsLock 开启且按下 Key A,则 KeyEventArgs.PlatformKeyCode = 65,另一方面,如果 CapsLock 关闭且按下 Key A,则 KeyEventArgs.PlatformKeyCode = 65 >.

换句话说,您无法根据 KeyEventArgs.PlatformKeyCode 属性确定 CapsLock 是否启用。


this 的答案问题似乎也有解决方案,它检查两件事:

  1. 输入的字母是大写字母并且没有按下 Shift 键
  2. 输入的字母是小写字母并按下了 Sift

这两种情况都意味着 CapsLock 已打开,但此解决方案也存在问题,给定 KeyEventArgs,您可以知道键盘中按下的键,但无法知道该键输出的 Char。

最佳答案

我建议使用 Behavior 进行此检测,因为您可以连接到 PasswordChanged 和 KeyDown 事件以确定 Caps Lock 是否打开。这是我编写的一个快速行为,用于检测 Caps Lock 是否打开。您可以绑定(bind)到 CapsLockOn 行为并使用类似数据状态行为的东西来隐藏/显示您的警告消息。

public class DetectCapsLockBehavior : Behavior<PasswordBox>
{
private int _lastKey;
private ModifierKeys _modifiers;

[Category("Settings")]
public bool CapsLockOn
{
get { return (bool)GetValue(CapsLockOnProperty); }
set { SetValue(CapsLockOnProperty, value); }
}

public static readonly DependencyProperty CapsLockOnProperty = DependencyProperty.Register("CapsLockOn", typeof(bool), typeof(DetectCapsLockBehavior), new PropertyMetadata(null));

protected override void OnAttached()
{
AssociatedObject.PasswordChanged += new RoutedEventHandler(AssociatedObject_PasswordChanged);
AssociatedObject.KeyDown += new KeyEventHandler(AssociatedObject_KeyDown);
}

void AssociatedObject_KeyDown(object sender, KeyEventArgs e)
{
_lastKey = e.PlatformKeyCode;
_modifiers = Keyboard.Modifiers;
}

void AssociatedObject_PasswordChanged(object sender, RoutedEventArgs e)
{
if (_lastKey >= 0x41 && _lastKey <= 0x5a)
{
var lastChar = AssociatedObject.Password.Last();
if (_modifiers != ModifierKeys.Shift)
{
CapsLockOn = char.ToLower(lastChar) != lastChar;
}
else
{
CapsLockOn = char.ToUpper(lastChar) != lastChar;
}
}
}
}

注意:这是示例代码,因此可能存在错误。只是想演示如何做到这一点。

关于c# - 在 Silverlight 中检测 CapsLock 是打开还是关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7474775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com