打开应用程序时,最初它可以检测numlock是on还是off,但是在我打开或关闭numlock之后,当应用程序仍然打开时,numlock状态仍然与最初的numlock状态相同。这是我的密码:
bool isNumLockedPressed = System.Windows.Input.Keyboard.IsKeyToggled(System.Windows.Input.Key.NumLock);
public MainWindow()
{
if (isNumLockedPressed == true)
NumLock.Foreground = System.Windows.Media.Brushes.White;
else
NumLock.Foreground = System.Windows.Media.Brushes.Red;
}我希望numlock状态与我的开/关动作保持一致。有什么建议吗?
更新
到目前为止,这是我的修改,但还是得不到我想要的。有什么建议吗?
bool isNumLockedPressed = System.Windows.Input.Keyboard.IsKeyToggled(System.Windows.Input.Key.NumLock);
int numLockStatus { get; set; }
public MainWindow()
{
if (isNumLockedPressed == true)
{
numLockStatus = 1;
NumLock.Foreground = System.Windows.Media.Brushes.White;
}
else
{
numLockStatus = 0;
NumLock.Foreground = System.Windows.Media.Brushes.Red;
}
}
private void NumLockKey_Press(object sender, KeyEventArgs e)
{
if (e.Key == Key.NumLock)
{
numLockStatus = 1;
NumLock.Foreground = System.Windows.Media.Brushes.White;
}
else
{
numLockStatus = 0;
NumLock.Foreground = System.Windows.Media.Brushes.Red;
}
}发布于 2015-04-28 13:00:11
这是我的解决方案:
bool isNumLockedPressed = System.Windows.Input.Keyboard.IsKeyToggled(System.Windows.Input.Key.NumLock);
int numLockStatus { get; set; }
public MainWindow()
{
if (isNumLockedPressed == true)
{
numLockStatus = 1;
NumLock.Foreground = System.Windows.Media.Brushes.White;
}
else
{
numLockStatus = 0;
NumLock.Foreground = System.Windows.Media.Brushes.Red;
}
}
private void NumLockKey_Press(object sender, KeyEventArgs e)
{
if (e.Key == Key.NumLock && e.IsToggled)
{
numLockStatus = 1;
NumLock.Foreground = System.Windows.Media.Brushes.White;
}
else if (e.Key == Key.NumLock && e.IsToggled == false)
{
numLockStatus = 0;
NumLock.Foreground = System.Windows.Media.Brushes.Red;
}
}发布于 2015-04-21 14:50:22
您正在调用一个函数并将结果存储在isNumLockedPressed中。除非有显式更改的代码,否则isNumLockedPressed的值将永远不会更改。如果您想在后面的代码中使用最新值更新它,只需在检查值isNumLockedPressed = System.Windows.Input.Keyboard.IsKeyToggled(System.Windows.Input.Key.NumLock);之前重复函数调用即可。
发布于 2015-04-21 15:01:31
所以bool是值类型,而不是引用类型。当您将IsKeyToggled的值赋值给值类型时,此时您将得到该值。如果值随后更改,您的本地bool变量将不知道它。
相反,您应该使用静态方法/属性创建实用程序/助手类。
public class KeyboardHelper
{
public bool IsNumLockPressed
{
get { return System.Windows.Input.Keyboard.IsKeyToggled(System.Windows.Input.Key.NumLock); }
}
}https://stackoverflow.com/questions/29775614
复制相似问题