【发布时间】: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