我有点奇怪的行为,我似乎不能解决。当我遍历ListBox.ItemsSource属性中的项时,似乎无法获得容器?我期望看到返回一个ListBoxItem,但我只得到null。
有什么想法吗?
下面是我使用的一小段代码:
this.lstResults.ItemsSource.ForEach(t =>
{
ListBoxItem lbi = this.lstResults.ItemContainerGenerator.ContainerFromItem(t) as ListBoxItem;
if (lbi != null)
{
this.AddToolTip(lbi);
}
});ItemsSource当前设置为字典,并且确实包含多个KVP。
发布于 2011-07-19 00:43:01
最终解决了这个问题……通过将VirtualizingStackPanel.IsVirtualizing="False"添加到我的XAML中,现在一切都像预期的那样工作。
缺点是,我错过了虚拟化带来的所有性能好处,所以我将加载路由改为异步,并在加载时在列表框中添加了一个“微调”……
发布于 2013-01-28 03:19:29
我在这个StackOverflow问题中发现了一些更适合我的情况的东西:
通过在调用ContainerFromItem或ContainerFromIndex之前添加UpdateLayout和ScrollIntoView调用,您可以实现DataGrid的这一部分,这使得它可以返回ContainerFromItem/ContainerFromIndex的值:
dataGrid.UpdateLayout();
dataGrid.ScrollIntoView(dataGrid.Items[index]);
var row = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(index);如果您不希望DataGrid中的当前位置发生变化,这对您来说可能不是一个好的解决方案,但如果可以,它可以在不关闭虚拟化的情况下工作。
发布于 2016-02-02 07:10:35
object viewItem = list.ItemContainerGenerator.ContainerFromItem(item);
if (viewItem == null)
{
list.UpdateLayout();
viewItem = list.ItemContainerGenerator.ContainerFromItem(item);
Debug.Assert(viewItem != null, "list.ItemContainerGenerator.ContainerFromItem(item) is null, even after UpdateLayout");
}https://stackoverflow.com/questions/6713365
复制相似问题