【问题标题】:How can I prevent a control from reacting to keyboard input without interrupting text input events?如何在不中断文本输入事件的情况下防止控件对键盘输入做出反应?
【发布时间】:2011-06-28 19:57:53
【问题描述】:

我有一个带有切换按钮的应用程序,当切换按钮时,它将侦听来自条形码扫描仪的文本输入。当条形码扫描仪开始向应用程序发送文本输入时,只要它发送一个空格字符,切换按钮(具有键盘焦点)就会最终被取消选择。

我需要找到一种方法来防止我的切换按钮受到键盘输入的影响,同时仍然允许 PreviewTextInput 或 TextInput 事件触发。

如果我在切换按钮上处理 PreviewKeyDown 事件,我可以通过将 e.Handled 属性设置为 true 来阻止按钮接收空格键输入,但这会阻止 PreviewTextInput 和 TextInput 事件触发。

我曾考虑在单击切换按钮后立即从切换按钮中移除焦点,但这似乎太过分了。我还想避免对切换按钮进行子类化。我还考虑过将按钮设置为禁用并允许通过单击鼠标重新启用它,但这不是一个优雅的解决方案。我认为必须有某种机制将空格键与按钮按下相关联,如果我能弄清楚如何解除它们的关联,我会有一个可行的解决方案,但我不知道它是如何工作的。

任何想法或想法将不胜感激。谢谢!

【问题讨论】:

  • 将按钮设置为不可聚焦可以吗?
  • 是的,据我所知,这实际上是一个很好的解决方案。它可以防止按钮在仍然交互的同时接收键盘命令,并且我可以像平常一样接收我的 TextInput 事件。谢谢!
  • 这听起来不是个好主意。用户如何在不使用鼠标的情况下点击按钮?
  • 好吧,在这种情况下,由于条形码扫描仪输入与键盘输入相同,我们需要在按钮切换时忽略所有键盘输入。如果我们不这样做,扫描仪会在扫描字符时快速打开和关闭按钮,因为它会多次传入空格字符。基本上,我们不希望用户能够在没有鼠标的情况下点击按钮。

标签: .net wpf


【解决方案1】:

按照 Mannimarco 的建议,一个好的解决方案是将切换按钮上的 Focusable 属性设置为 False。

【讨论】:

    【解决方案2】:

    单击按钮时,将焦点设置到TextBox 控件以捕获文本。 使控件的背景和字体颜色相同以隐藏输入。

    您必须在切换按钮处于活动状态时捕捉LostFocus 事件并设置e.Handled = false;

    【讨论】:

    • 感谢您的建议。我想避免将焦点转移到另一个控件来捕获文本输入,因为我应该能够在窗口本身中捕获输入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    • 2020-12-10
    • 2013-01-01
    相关资源
    最近更新 更多