Wpf OnRender()中的IsKeyboardFocused始终为False

Wpf OnRender()中的IsKeyboardFocused始终为False,wpf,wpf-controls,Wpf,Wpf Controls,我正在尝试为我的程序制作自己的自定义文本编辑器,到目前为止,它可以进行语法高亮显示。它甚至还不能编辑文本 我在尝试显示插入符号时遇到了障碍 在我的OnRender方法中,我使用IsKeyboardFocused检查我是否有键盘焦点,如果有,它就会继续并绘制光标 我已经通过keyboard.FocusMyCustomTextEditor告诉键盘,当我用鼠标单击我的控件时,请将焦点放在该控件上,当我使用GotKeyboardFocus事件处理程序截获它时,我可以使用调试消息验证焦点是否已成功传递 然

我正在尝试为我的程序制作自己的自定义文本编辑器,到目前为止,它可以进行语法高亮显示。它甚至还不能编辑文本

我在尝试显示插入符号时遇到了障碍

在我的OnRender方法中,我使用IsKeyboardFocused检查我是否有键盘焦点,如果有,它就会继续并绘制光标

我已经通过keyboard.FocusMyCustomTextEditor告诉键盘,当我用鼠标单击我的控件时,请将焦点放在该控件上,当我使用GotKeyboardFocus事件处理程序截获它时,我可以使用调试消息验证焦点是否已成功传递

然而,无论我做什么,我似乎都无法在OnRender中使IsKeyboardFocused=True。我把Debug.Print放在了OnRender的开头、结尾、中间和其他可以想象的地方,结果总是假的

我的方法似乎很简单。我只是不明白我能漏掉什么。谢谢你花时间阅读这篇文章

您是否尝试过使用FocusManager.FocusedElement来确定当您希望控件具有焦点时哪个元素处于焦点位置?这应该能提供一些线索


在黑暗中拍摄,是在加载控件后再次调用OnRender,还是只检查init?我记得焦点问题涉及在加载事件期间将焦点设置在控件上,但之后焦点会恢复。

我使用了您的想法,并了解到发生了什么。我使用ScrollViewer作为MyCustomTextEditor的父元素。事实证明,我的重点一直是路由到ScrollViewer,我在LostFocus事件处理程序中使用Keyboard.FocusedElement.ToString对其进行了验证。这实际上对我来说很好,因为我的ScrollViewer只用于MyCustomTextEditor。非常感谢你的帮助!