wpf启用对丢失焦点的控制

时间:2015-10-23 21:42:25

标签: wpf vb6 focus

我有一个简单的wpf应用程序,包含3个文本框(启用tx1,禁用tx2和启用tx3)以及另外一个与此无关的文本框。

根据tx1的内容,我想启用tx2。我这样做是检查tx1_LostFocus并将tx2.IsEnabled设置为True。

我希望在离开tx1之后将光标放在tx2中,但事实并非如此,我总是在tx3中找到光标,尽管在动作结束后启用了tx2。我假设焦点管理器只是将tx3作为目标,并且启用tx2来得太晚。

使用PreviewLostKeyboardFOcus的所有尝试都无济于事。

请注意我必须从vb6进行传统的软件传输,所以我不能使用IDataErrorInfo进行绑定或验证,我只是像所描述的那样强制使用光标。

有任何线索吗?

3 个答案:

答案 0 :(得分:1)

在tx1 make失去焦点事件时启用tx2为true然后将焦点设置为tx2并使用dispatcher或thread.threading.sleep()在此线程上添加一些延迟并在xaml绑定中给出更新源trigger =属性已更改

答案 1 :(得分:1)

行为符合预期。当您的LostFocus事件触发时,焦点已连续移动到Tab键顺序中的下一个(启用)控件。因为在按照选项卡索引顺序移动焦点之前,您没有启用序列中的下一个文本框,所以将跳过您想要拥有焦点的控件,因为它已被禁用。

您有两种选择来获得所需的行为:

  1. 将验证码移至触发LOFFORE前的事件 (这样当用户按Tab键时,控件就已经存在了 已启用,因此将作为选项卡中的下一个控件 索引顺序),例如验证或更改

  2. 将验证码留在原处,并按照Gilberto和Kumar的说法进行操作     建议通过指定焦点应该以编程方式移动的位置(即     在你的验证代码的末尾调用txt2.SetFocus()     LostFocus事件)

答案 2 :(得分:-1)

您是否尝试过“Tabindex”属性? 你也可以使用丢失焦点事件:“tx2.setfocus”等......