相关疑难解决方法(0)

你如何解决这个LostFocus/LostKeyboardFocus问题?

好吧,我有一个具有IsEditing属性的控件,为了参数的缘故,它有一个默认模板,通常是一个文本块,但是当IsEditing为true时,它会在文本框中交换以进行就地编辑.现在当控件失去焦点时,如果它仍在编辑,它应该退出编辑模式并在TextBlock模板中交换回来.非常直接,对吧?

想想在Windows资源管理器或桌面上重命名文件的行为(这与我所知道的相同......)这就是我们想要的行为.

问题是您不能使用LostFocus事件,因为当您切换到另一个窗口(或作为FocusManager的元素)时,LostFocus不会触发,因为控件仍具有逻辑焦点,因此无法工作.

如果您改为使用LostKeyboardFocus,虽然这确实解决了"其他FocusManager"问题,但现在您有了一个新问题:当您进行编辑并右键单击文本框以显示上下文菜单时,因为上下文菜单现在有键盘焦点,您的控件失去键盘焦点,退出编辑模式并关闭上下文菜单,使用户感到困惑!

现在我已经尝试设置一个标志,在菜单打开之前忽略LostKeyboardFocus,然后在LostKeyboardFocus事件中使用该fiag来确定是否将其踢出编辑模式,但是如果菜单打开并且我点击其他位置应用程序,因为控件本身不再有键盘焦点(菜单有它)控件永远不会获得另一个LostKeyboardFocus事件,因此它仍然处于编辑模式.(我可能必须在菜单关闭时添加一个检查以查看焦点是什么,然后手动将其从EditMode中踢出来,如果它不是控件.这看起来很有希望.)

那么......任何人都知道如何成功编码这种行为?

标记

wpf lostfocus lost-focus focusmanager keyboardfocusmanager

10
推荐指数
1
解决办法
2万
查看次数