【问题标题】:TextBox LostFocus event occurs too oftenTextBox LostFocus 事件发生得太频繁
【发布时间】:2011-12-22 11:31:29
【问题描述】:

我在 Silverlight 和 WPF 中有一个应用程序。该错误只发生在 Silverlight 中,但 WPF 中使用了相同的代码。

在我的应用程序中,有一个RibbonBar,还有几个RibbonGroups。在每个RibbonGroup 中至少有一个RibbonButton。其中一个RibbonGroups 还包含四个TextBox

每个TextBox 都有自己的OnLostFocus-Handler。当我离开 TextBox 时,相关的 Handler 就会被提升。

现在,(1) 我单击其中一个文本框,(2) 然后单击 RibbonButton,OnLostFocus 升高,然后出现 RibbonButton 下拉菜单。一切正常。

之后,(3) 我点击另一个 RibbonButton。 OnLostFocus 再次加注,虽然 - 恕我直言 - 它不应该。

所以它一直在继续。每次操作后,TextBox 都会保持(或返回,不知道)焦点,这会导致 OnLostFocus-Handler 升高。

在 WPF 中,相同的代码不会再次引发 OnLostFocus。只有一次,当它真正失去焦点时。

有谁知道,为什么这种行为在 Silverlight 中如此奇怪。与 WPF 真正不同的是,我可能只需要设置一个默认值与 WPF 不同的属性。

提前致谢。

【问题讨论】:

  • 你确定你的意思是 TextBlock 而不是 TextBox?
  • @RobSiklos 哦,该死的,你是对的。当然是文本框。
  • 从头开始 - 似乎这是通常的 OnLostFocus 行为。如果您不想在每次从 TextBox 导航后立即获取此事件 - 您应该使用一些逻辑来扩展它。
  • @anatoliiG,从描述中看,OP 似乎并没有故意将焦点放回文本框。我认为 OP 的意思是一旦 TextBox 获得(然后失去)焦点 ONCE,之后对任何控件的每个操作都会导致 LostFocus 运行。
  • 在 LostFocus 方法中调用 myTextBox.Focus() 会导致无限循环。换句话说,当它失去焦点并且您调用 Focus 回到它时,它会再次调用 LostFocus - 即使它没有再次失去焦点。现在,我将不得不添加一些丑陋的技巧来告诉它“不,你没有再次失去同一个控件的焦点 - 这怎么可能”

标签: c# wpf silverlight


【解决方案1】:

尝试使用 OnPreviewLostKeyboardFocus。 OnLostFocus 用于逻辑焦点,您可能会因为各种原因而失去焦点。

我不确定原因,但我怀疑您看到的问题可能是因为功能区栏位于 FocusScope 中。当你把焦点放在焦点范围内的某个东西上时,你最终得到的结果可能看起来像是焦点在一些周围反弹。我不确定这个答案,WPF 中的焦点非常复杂。提交一些代码示例可能会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多