【问题标题】:Scrollviewer messing with focus滚动查看器弄乱了焦点
【发布时间】:2014-09-22 10:46:34
【问题描述】:

我在另一个窗口的用户控件之上有一个窗口(带有屏幕键盘)。

我希望当用户在键盘窗口之外单击时,关闭键盘窗口。为此,我使用了 onlostFocus 和 Deactivated 事件,在其中我调用了 HideKeyboardWindow() 方法。

在用户控件中,我有一个 1 行的网格。当键盘打开并单击网格行时,不会调用 HideKeyboardWindow()。但是,当我使用 ScrollViewer 包装行时,会调用 HideKeyboardWindow()。

为什么滚动查看器会弄乱焦点?

【问题讨论】:

  • 您可能没有为键盘窗口提供任何宽度或高度,这就是它出现问题的原因。请尝试为您的键盘网格行设置最小宽度,然后检查
  • @AshokRathod 键盘窗口已定义高度和宽度。

标签: wpf focus scrollviewer


【解决方案1】:

GotFocus 事件不是用于您的目的的好事件,因为它可能在不适当的时间引发,例如当用户将鼠标悬停在键盘的内部控件上时。更好的解决方案是简单地将额外的MouseDown 处理程序附加到父控件。当父处理程序接收到事件时,用户点击了键盘控件之外的地方。

【讨论】:

  • 但是父控件是一个网格,它位于另一个窗口中的用户控件中。有很多父控件。我不能给它们都添加事件。
  • 不,我的意思是顶级父母...我很确定您只有其中一个。在该控件中使用MouseDown 处理程序,在键盘控件中使用PreviewMouseDown 处理程序,以便在父事件之前引发。
  • 顶级父级的 MouseDown 事件没有被调用。
  • 试试PreviewMouseDown 事件。
猜你喜欢
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-28
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
相关资源
最近更新 更多