文本框失去焦点事件发生太频繁

3
我有一个在Silverlight和WPF中的应用程序。错误只发生在Silverlight中,但相同的代码在WPF中也被使用。
我的应用程序中有一个RibbonBar,其中包含多个RibbonGroups。在每个RibbonGroup中至少有一个RibbonButton。其中一个RibbonGroups还包含四个TextBox。
每个TextBox都有自己的OnLostFocus-Handler。当我离开一个TextBox时,相关的Handler就会被触发。
现在,(1)我点击其中一个TextBox,然后(2)点击一个RibbonButton,OnLostFocus被触发,之后RibbonButton下拉菜单出现。一切正常。
之后,(3)我点击另一个RibbonButton。再次触发OnLostFocus,尽管-在我看来-它不应该。
这样就一直持续下去。每次操作后,TextBox保持(或恢复,不知道)焦点,这会导致OnLostFocus-Handler被触发。
在WPF中,相同的代码不会再次触发OnLostFocus。只有在真正失去焦点时才会触发一次。
有人知道为什么Silverlight的行为如此奇怪吗?到底与WPF有何不同,也许我只需要设置一个默认值与WPF不同的属性。
提前感谢。

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

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接