C# 如何设置列表框项目的焦点?

C# 如何设置列表框项目的焦点?,c#,wpf,xaml,C#,Wpf,Xaml,我有一个定义的列表框,如下所示: var listBox = new ListBox(); listBox.Items.Add(1); listBox.Items.Add(2); listBox.Items.Add(3); 我想直接将焦点设置到列表框中的一个项目 如果我这样做: listBox.SelectedIndex = 0; listBox.Focus(); 焦点设置为整个列表框,因此如果我按下箭头向下键将选择移动到下面的项目,我必须按下箭头两次。第一次焦点从整个列表框

我有一个定义的列表框,如下所示:

var listBox = new ListBox();
listBox.Items.Add(1);        
listBox.Items.Add(2);
listBox.Items.Add(3);
我想直接将焦点设置到列表框中的一个项目

如果我这样做:

listBox.SelectedIndex = 0;
listBox.Focus();
焦点设置为整个列表框,因此如果我按下箭头向下键将选择移动到下面的项目,我必须按下箭头两次。第一次焦点从整个列表框跳到第一个项目,然后我可以再次按下箭头,选择最终跳下来

我想直接将焦点设置到第一个项目,这样我就不必按箭头两次。

这里有一个类似的问题(如果不相等的话)

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


不能对列表框项使用焦点。()。但是,您可以选择与您希望做的事情几乎相同的项目<代码>列表框。SelectedIndex=0

使用ListBox SelectedValue属性可能重复Hmm,我做了((ListBoxItem)ListBox.SelectedItem.Focus();但由于某种原因,它没有效果,我仍然要点击两次。我想我必须通过模拟一次按键来解决这个问题。你还在使用
listBox.focus()吗代码中的某个地方?@elgonzo没有看到WPF标记。很抱歉:)看起来好多了(只需删除答案中的WinForms内容):)WindowLoaded可能不是执行此操作的正确时机,完全取决于列表框最初何时填充第一个项目……不,这不起作用。这似乎毫无效果。(它仍然只选择整个列表框)@user3595338,请参阅我在您的问题下的最后一条评论。Marcelo,删除
listbox.Focus()来自代码。我现在才注意到。这很可能无法正常工作。。。(在WPF中,设置焦点是一个延迟操作。为了好玩,您可以将listbox.focus放在方法的末尾,并比较不同的行为…;))如果您可以添加一些解释,那就太好了
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    listBox.Focus();
    listBox.SelectedIndex = 0;
    ((ListBoxItem)listBox.SelectedItem).Focus();
}
var listBoxItem =  
   (ListBoxItem)listBox
     .ItemContainerGenerator
       .ContainerFromItem(listBox.SelectedItem);

listBoxItem.Focus();