阻止WPF文本框失去焦点

阻止WPF文本框失去焦点,wpf,textbox,focus,Wpf,Textbox,Focus,我有一个WPF文本框,在我允许它失去键盘/焦点之前,我想检查文本值是否正确 我尝试在InputBox\u LostFocus和InputBox\u LostKeyboardFocus事件中设置e.Handled,但它似乎没有达到我想要的效果 关于如何将焦点锁定到文本框的任何建议?您可以调用鼠标。在ui元素上捕获。然后,无论是否在元素上,这将为您提供出现的每个鼠标事件。但是它很难使用。您可以在文本框上捕获鼠标并注册丢失的捕获事件,当您丢失捕获时,您可以重新捕获。你必须注意奇怪的行为。一般来说,不允

我有一个WPF
文本框
,在我允许它失去键盘/焦点之前,我想检查文本值是否正确

我尝试在
InputBox\u LostFocus
InputBox\u LostKeyboardFocus
事件中设置e.Handled,但它似乎没有达到我想要的效果


关于如何将焦点锁定到
文本框的任何建议?

您可以调用
鼠标。在
ui元素上捕获
。然后,无论是否在元素上,这将为您提供出现的每个鼠标事件。但是它很难使用。您可以在文本框上捕获鼠标并注册丢失的捕获事件,当您丢失捕获时,您可以重新捕获。你必须注意奇怪的行为。一般来说,不允许用户离开某个字段是不好的做法(我认为)。更好的做法是允许他们做任何他们想做的事情,但在输入数据后禁用他们按下的按钮,直到所有字段都有效(或类似)

这里有一些链接

组合框使用鼠标捕捉来告知用户是否单击了应用程序中的其他位置,如果您单击其他控件(或窗口外)组合框打开,则关闭组合框

我不知道这项技术是否会阻止您禁用元素。wpf应用程序中有两种焦点。你有逻辑焦点和键盘焦点。多个元素可以同时具有逻辑焦点(每个都在焦点范围内)。例如,当你点击一个菜单时,一个文本框可以有逻辑焦点(它也有逻辑焦点)。键盘焦点一次只能位于一个位置。你将为自己做很多工作。如果你以正确的方式进行互动,我会认真考虑。您可以花费数天的时间来纠正这种交互。如果您停止文本框失去焦点,如果用户单击关闭按钮会发生什么情况


以下是执行此操作的最佳方法,即处理PreviewLostKeyboardFocus事件,该事件将在事件向下传输到文本框时触发。将handle设置为true,其他任何内容都不会收到通知(这意味着焦点不会从文本框转移)。希望这有帮助。

谢谢Aran,这是一个很好的建议。也许我会把功能看得不一样。焦点锁定带来了一种令人讨厌的用户体验。在我花费大量精力试图找出如何做到这一点之前,我会重新设计UI,使其工作方式有所不同——比如说,禁用窗口中的所有其他控件,直到
文本框
具有有效内容为止。@Robert:除非您设计的是收银机应用程序,否则它实际上是强制性的。在注册应用程序中,你输入一个数字或文本,然后点击一个按钮来决定输入的内容。(例如,编号然后SKU、编号然后数量、编号然后付款键等)对我来说就像一个符咒。太简单了!