【问题标题】:Focus In An ItemsControl将焦点放在 ItemsControl 中
【发布时间】:2010-05-05 10:09:15
【问题描述】:

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

谢谢,

安德鲁

【问题讨论】:

  • 哦,对不起。 Tab 键工作正常。我需要以编程方式将焦点转移到 ItemsControl 中的下一个元素。
  • 我想我可能不小心删除了一条评论...如果是这样,对不起:(我是新人...
  • 不,当我重新阅读您的问题并意识到我是个白痴时,我删除了自己的评论。 :)

标签: wpf focus


【解决方案1】:

您应该能够在 Window(或 Page,取决于您的顶级容器是什么)上调用 MoveFocus 方法。

this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));

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

您无法直接在 ItemsControl 上调用 MoveFocus(给它一个名称,并将上面代码中的“this”替换为该名称)。

【讨论】:

  • 当我尝试您的建议时,焦点转移到 ItemsControl 本身,而不是 ItemsControl 中的下一个元素。我尝试了您的建议的变体 tbxWithFocus.MoveFocus(new TraversalRequest(FocusNavigationDirection.Down));但它不断将焦点向下移动到列表中的两个元素而不是一个元素。这真的很奇怪。我不知道为什么它会在列表中向下移动两个元素。如果我注释掉这条线,它根本不会移动焦点......
  • 你是如何开始改变焦点的?用tab键?如果是这样,您需要使用 e.Handled = true 取消默认键事件。
  • 我可能应该提到 TextBox 绑定到控件中的一个属性,并且正在调用的方法是在按下 Enter 键时在 ObservableCollection 属性中插入一个元素。 ..
  • 哦....好的。我想我明白我做错了什么。我应该将马克的答案标记为正确(除了我真的需要向下方向)。显然,我的控件跳过了新创建的元素,因为当我移动键盘焦点时它没有在 ItemsControl 中更新......谢谢大家!这让我很困惑!
  • 这很奇怪 - 我不认为 ItemsControl 默认接受输入焦点。您总是可以将 Focusable(或者 IsFocusable?)设置在 ItemsControl 上以防止这种情况发生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多