WPF检测键序列

Posted

技术标签:

【中文标题】WPF检测键序列【英文标题】:WPF detect key sequence 【发布时间】:2019-06-04 07:41:43 【问题描述】:

我想从我的 WPF 应用程序中隐藏一个 groupox,并在应用程序处于活动状态(未最小化)时通过按键代码手动启用它

这个例子有时只需要一个按键,但我需要一个序列

protected override void OnPreviewKeyDown(KeyEventArgs e)
    
        base.OnPreviewKeyDown(e);
        if (e.Key == Key.B)
        
            bdgb.Visibility = Visibility.Visible;
        
    

【问题讨论】:

您是否考虑过“热键”或使用 ctrl 或 alt + 一个字母作为键弦的输入绑定?这比输入一些魔术字符串更常见。 我希望它没有任何其他键被持有 您可以将键绑定与功能键结合使用。按一系列字母是一个坏主意。还。活跃具有特定的含义,如专注。它仅在您单击窗口时有效,因为如果您单击另一个窗口,则您的应用程序将处于非活动状态。只有一件事可以有焦点。 好吧,假设我会选择 Ctrl+A 组合而不是序列...我该怎么做? 【参考方案1】:

例如,您可以覆盖窗口的 OnPreviewKeyDown 方法,例如:

protected override void OnPreviewKeyDown(KeyEventArgs e)

    base.OnPreviewKeyDown(e);
    if (e.Key == Key.B)
    
        //...
    

【讨论】:

更新了代码。当按下 B 时,名为 bdgb 的组合框应该会变得可见。 它只在点击用户界面的一些随机部分时有效,同时发送垃圾邮件“B”... 您的问题不可重现。请阅读this 并相应修改您的问题。 我相信这是因为我没有将代码应用到 MainWindow 本身,而是应用到其中的页面。我需要发现的隐藏控件位于 MainWindow 中包含的页面中。我会把代码放在 MW 中,但我不知道如何从那里访问控件 那是一个不同的话题,不是吗?如果您有其他问题,请提出一个新问题。您最初的问题是关于如何处理按键。【参考方案2】:

你把处理程序放在什么上面?只有当前聚焦的元素会收到通知,如果没有处理,它会向上爬。

你需要把它放在最顶层的UIElement中,也就是你的窗口。

或者,您可以通过创建一个绑定到密钥的命令并在您的虚拟机GroupBoxVisible 上拥有一个属性,将其设置为“True”并绑定到GroupBox.Visibillity,从而以更复杂的 MVVMy WPF 样式执行此操作。

摩尔详情here

【讨论】:

以上是关于WPF检测键序列的主要内容,如果未能解决你的问题,请参考以下文章

wpf 限制textbox只能输入数字及特殊键

检测修饰键按下?

如何在不按 Enter C# WPF 的情况下检测我的键盘

您如何检测 WPF 日历控件上的自动月班?

如何在Node.js中检测键序列以执行某些操作

如何检测在 C 中使用诅咒按下的箭头键?