wpf禁用焦点丢失

时间:2015-10-21 19:17:04

标签: wpf textbox focus

我有一个简单的wpf应用程序,它包含3个文本框(tx1,tx2和tx3)。

根据tx1的内容,我想禁用tx2或tx3。 我这样做检查tx1_LostFocus并将tx2.IsEnabled或tx3.IsEnabled设置为False。

禁用tx3时,一切正常,光标转到tx2。

但禁用tx2会导致我的光标无法在tx3中看到,但它根本不可见。

我认为问题的核心是在tx1_LostFocus中设置tx2.IsEnabled = False。

但我在失焦的事件中被迫这样做。

有任何线索吗?

2 个答案:

答案 0 :(得分:1)

所以我做了一些快速测试,看起来控件即使没有启用也能获得焦点。我在LostFocus的{​​{1}}事件处理程序中添加了这些行:

textOne

Debug.Print(b.Name + " lost focus."); Debug.Print("Disabling " + this.textTwo.Name);

GotFocus事件处理程序中的这一行
textTwo

您可以在输出窗口中看到,当我Debug.Print("Enabling " + this.textTwo.Name); textOne标签突出时,即使它被禁用,也会立即获得焦点:

  

textOne失去了焦点。

     

禁用textTwo

     

textTwo得到了关注。

我认为最好的解决方案是在禁用控件后手动设置焦点。像这样:

textTwo

更好的解决方案

我更喜欢这种解决方案,因为它不易碎。如果重新排序控件或更改条件逻辑,则不会引入奇怪的标签行为。在if (testCondition) { tx2.IsEnabled = false; tx3.Focus(); } else { tx3.IsEnabled = false; tx2.Focus(); } 的{​​{1}}事件处理程序中,如果禁用GotFocus,您可以添加此代码以强制焦点移至下一个控件:

tx2

答案 1 :(得分:0)

当需要在tx1_LostFocus的末尾将光标聚焦在其上时,请使用tx3.Focus();。 如果禁用tx3,请不要忘记启用tx2,反之亦然。