【问题标题】:How to set focus on listbox item?如何设置列表框项目的焦点?
【发布时间】:2014-06-08 20:47:16
【问题描述】:

我有一个这样定义的列表框:

var listBox = new ListBox();
listBox.Items.Add(1);        
listBox.Items.Add(2);
listBox.Items.Add(3);

我想将焦点直接设置到列表框中的项目。

如果我这样做:

listBox.SelectedIndex = 0;
listBox.Focus();

焦点设置到整个列表框,所以如果我按下箭头将选择移动到下面的项目,我必须按两次箭头。第一次焦点从整个listBox跳到第一项,然后当我可以再次按下箭头时,选择最终向下跳。

我想将焦点直接设置到第一项,所以我不必按两次箭头。

【问题讨论】:

  • 使用 ListBox SelectedValue 属性
  • 嗯,我做了 ((ListBoxItem) listBox.SelectedItem).Focus();但由于某种原因它没有效果,我仍然需要点击两次。我想我将不得不通过模拟一键来解决它。
  • 您的代码中是否还有listBox.focus();

标签: c# wpf xaml


【解决方案1】:
var listBoxItem =  
   (ListBoxItem)listBox
     .ItemContainerGenerator
       .ContainerFromItem(listBox.SelectedItem);

listBoxItem.Focus();

【讨论】:

    【解决方案2】:

    这是一个类似(如果不相等)的问题Setting focus on a ListBox item breaks keyboard navigation

    还有代码(我不会弄乱 WPF,所以我不能保证它有效,但它在我链接的线程上被接受,所以它可能):

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        listBox.Focus();
        listBox.SelectedIndex = 0;
        ((ListBoxItem)listBox.SelectedItem).Focus();
    }
    

    【讨论】:

    • @elgonzo 没有看到 WPF 标签。对此感到抱歉:)
    • 看起来好多了(只需删除答案中的 WinForms 内容):) WindowLoaded 可能不是执行此操作的正确时间,这完全取决于最初填充列表框的时间与第一个项目...
    • 不,这行不通。似乎完全没有效果。 (它仍然只选择整个列表框)
    • Marcelo,从代码中删除 listBox.Focus();。我现在才注意到。这很可能无法正常工作......(在 WPF 中,设置焦点是一个延迟操作。为了好玩,您可以将 listbox.Focus 放在方法的末尾并比较不同的行为......;))
    • 如果通过 ItemsSource 属性绑定了项目,这将不起作用。在这种情况下,所选项目无法转换为 ListBoxItem,因此您必须使用 @Robin 之前的答案。
    【解决方案3】:

    您不能在列表框项目上使用 Focus.()。但是,您可以选择与您想要做的事情几乎相同的项目。 listbox.SelectedIndex = 0;

    【讨论】:

    • 如果你能添加一些解释就好了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    相关资源
    最近更新 更多