Wpf 项控件中的焦点

Wpf 项控件中的焦点,wpf,focus,Wpf,Focus,我有一个使用DataTemplate的ItemsControl。DataTemplate包含一个文本框,可以接收键盘焦点。我需要能够将键盘焦点从DataTemplate中当前聚焦的文本框移动到下一个文本框,就像按下Tab键一样。我注意到有一个UIElement.MoveFocus()方法,但这就引出了一个问题,即应该使用哪个UIElement来调用该方法。这可能就是为什么我没有得到这个方法来为我工作的原因。。。任何帮助都将不胜感激 谢谢 Andrew您应该能够在窗口(或页面)上调用MoveFoc

我有一个使用DataTemplate的ItemsControl。DataTemplate包含一个文本框,可以接收键盘焦点。我需要能够将键盘焦点从DataTemplate中当前聚焦的文本框移动到下一个文本框,就像按下Tab键一样。我注意到有一个UIElement.MoveFocus()方法,但这就引出了一个问题,即应该使用哪个UIElement来调用该方法。这可能就是为什么我没有得到这个方法来为我工作的原因。。。任何帮助都将不胜感激

谢谢


Andrew

您应该能够在窗口(或页面)上调用MoveFocus方法,具体取决于顶级容器是什么

这将告诉WPF将焦点移动到下一个控件,或者使用控件上的TabIndex属性,或者只是自然地来回移动以查找下一个逻辑控件


如果失败,您可以直接调用ItemsControl上的MoveFocus(给它一个名称,并在上面的代码中用该名称替换“this”。

哦,对不起。Tab键工作正常。我需要通过编程将焦点转移到ItemsControl中的下一个元素。我想我可能是无意中删除了一条注释。。。如果是这样,对不起:(我是新来的……不,当我重新阅读你的问题时,我删除了我自己的评论,意识到我是个白痴。)当我尝试你的建议时,焦点转移到ItemsControl本身,而不是ItemsControl中的下一个元素。我尝试了您建议的一个变体,tbxWithFocus.MoveFocus(新的遍历请求(FocusNavigationDirection.Down));但它会不断将焦点向下移动列表中的两个元素,而不是一个。这真奇怪。我不知道为什么它会在列表中向下移动两个元素。如果我把这行注释掉,它根本不会移动焦点…你是如何开始焦点改变的?用tab键?如果是这样,您需要使用e.Handled=true来取消默认键事件。我可能应该提到TextBox绑定到控件中的一个属性,并且正在调用的方法是在按下enter键时在ObservaleCollection属性中插入一个元素……哦。。。。可以我想我明白我做错了什么。我应该把马克的答案标记为正确(除了我真的需要向下的方向)。显然,我的控件跳过了新创建的元素,因为当我移动键盘焦点时,它在ItemsControl中没有更新。。。谢谢大家!这让我很困惑!这很奇怪-我不认为ItemsControl默认接受输入焦点。您可以始终将Focusable(或IsFocusable?)设置为落在ItemsControl上,以防止出现这种情况。
this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));