首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ItemContainerGenerator.ContainerFromItem()返回null?

ItemContainerGenerator.ContainerFromItem()返回null?
EN

Stack Overflow用户
提问于 2011-07-16 05:31:45
回答 10查看 44.5K关注 0票数 43

我有点奇怪的行为,我似乎不能解决。当我遍历ListBox.ItemsSource属性中的项时,似乎无法获得容器?我期望看到返回一个ListBoxItem,但我只得到null。

有什么想法吗?

下面是我使用的一小段代码:

代码语言:javascript
复制
this.lstResults.ItemsSource.ForEach(t =>
    {
        ListBoxItem lbi = this.lstResults.ItemContainerGenerator.ContainerFromItem(t) as ListBoxItem;

        if (lbi != null)
        {
            this.AddToolTip(lbi);
        }
    });

ItemsSource当前设置为字典,并且确实包含多个KVP。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2011-07-19 00:43:01

最终解决了这个问题……通过将VirtualizingStackPanel.IsVirtualizing="False"添加到我的XAML中,现在一切都像预期的那样工作。

缺点是,我错过了虚拟化带来的所有性能好处,所以我将加载路由改为异步,并在加载时在列表框中添加了一个“微调”……

票数 20
EN

Stack Overflow用户

发布于 2013-01-28 03:19:29

我在这个StackOverflow问题中发现了一些更适合我的情况的东西:

Get row in datagrid

通过在调用ContainerFromItem或ContainerFromIndex之前添加UpdateLayout和ScrollIntoView调用,您可以实现DataGrid的这一部分,这使得它可以返回ContainerFromItem/ContainerFromIndex的值:

代码语言:javascript
复制
dataGrid.UpdateLayout();
dataGrid.ScrollIntoView(dataGrid.Items[index]);
var row = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(index);

如果您不希望DataGrid中的当前位置发生变化,这对您来说可能不是一个好的解决方案,但如果可以,它可以在不关闭虚拟化的情况下工作。

票数 55
EN

Stack Overflow用户

发布于 2016-02-02 07:10:35

代码语言:javascript
复制
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");
}
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6713365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档