在WPF中,如何确定如何接收焦点

在WPF中,如何确定如何接收焦点,wpf,focus,Wpf,Focus,我在表单上有一个文本框,希望在收到焦点时根据焦点的接收方式执行不同的操作 如果用户单击文本框,我希望使用标准方法,将光标放置在文本框内文本字符串的末尾。如果用户选项卡指向文本框,我希望选择文本框中包含的所有文本 有没有一种优雅的方法可以做到这一点?我想您可以尝试的一件事是设置一些应用程序级(或父级)隧道事件,这样您就可以切换一个标志,指示鼠标单击或键盘按下(PreviewMouseDown和PreviewKeyDown)。根据之前通过选中该标志按下的内容,您可以在文本框获得焦点时执行相应的操作。

我在表单上有一个文本框,希望在收到焦点时根据焦点的接收方式执行不同的操作

如果用户单击文本框,我希望使用标准方法,将光标放置在文本框内文本字符串的末尾。如果用户选项卡指向文本框,我希望选择文本框中包含的所有文本


有没有一种优雅的方法可以做到这一点?

我想您可以尝试的一件事是设置一些应用程序级(或父级)隧道事件,这样您就可以切换一个标志,指示鼠标单击或键盘按下(
PreviewMouseDown
PreviewKeyDown
)。根据之前通过选中该标志按下的内容,您可以在文本框获得焦点时执行相应的操作。

我想您可以尝试的一件事是设置一些应用程序级(或父级)隧道事件,以便切换一个标志,指示鼠标单击或键盘按下(
PreviewMouseDown
PreviewKeyDown
)。根据之前通过选中该标志按下的按钮,您可以在文本框获得焦点时执行相应的操作。

实际上,PreviewMouseDown最好检查文本框本身。但其余的都是正确的。回答很好!谢谢,我希望了解一个优雅的解决方案,在处理GotFocus或PreviewGotKeyboardF时ocus我可以确定它是如何接收焦点的。我尝试检查Tab键的KeyState,它90%的时间都有效,但这是一个计时问题,取决于在处理焦点事件时Tab键是否仍被按下。我还截取KeyDown来处理我自己的Tab键,在那里我发送遍历请求,然后告诉下一个元素ent通过遍历请求选择它的测试不断选择错误的项,它转到父项而不是下一个子项。@WPFNewbie:您不必检查键事件是否来自tab键,只需检查它是否是键。这些事件(在大多数情况下)相互排斥,所以任何按键都来自键盘,任何点击都来自鼠标。除非您在应用程序中设置其他方法来更改焦点,否则鼠标点击都无法触发按键事件,反之亦然。实际上,PreviewMouseDown最好检查文本框本身。但其余的都是正确的。回答不错!Thanks,我希望了解一个优雅的解决方案,在处理GotFocus或PreviewGotKeyboardFocus时,我可以确定它是如何接收焦点的。我尝试检查Tab键的键状态,它在90%的时间内工作,但在处理焦点事件时Tab键是否仍然按下是一个计时问题。我还rcepted KeyDown亲自处理选项卡,在这里我发送遍历请求,然后告诉下一个元素选择它的测试。遍历请求不断选择错误的项,它转到父项,而不是下一个子项。@WPFNewbie:您不必检查键事件是否来自选项卡键,只要它是键即可。这些通风口(在大多数情况下)是互斥的,因此任何按键都来自键盘,任何单击都来自鼠标。除非您设置其他方法来更改应用程序中的焦点,否则鼠标单击无法触发按键事件,反之亦然。