您必须监听并响应ItemsGenerator.StatusChanged
事件并等待ItemContainers生成,然后才能使用ContainerFromElement访问它们.
进一步搜索,我在MSDN论坛中找到了一个遇到同样问题的人.这似乎是WPF中的一个错误,当一个人设置了GroupStyle时.解决方案是在渲染过程之后进行ItemGenerator的访问.以下是您问题的代码.我试过这个,它有效:
void ItemContainerGenerator_StatusChanged(object sender, EventArgs e) { if (listBox1.ItemContainerGenerator.Status == System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated) { listBox1.ItemContainerGenerator.StatusChanged -= ItemContainerGenerator_StatusChanged; Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Input, new Action(DelayedAction)); } } void DelayedAction() { var i = listBox1.ItemContainerGenerator.ContainerFromIndex(1) as ListBoxItem; // select and keyboard-focus the second item i.IsSelected = true; i.Focus(); }