【问题标题】:Unable to find container from item in Treeview无法从 Treeview 中的项目中找到容器
【发布时间】:2011-11-29 16:20:58
【问题描述】:

我有一个 ItemsControlTreeviewTreevieItem),其中 Item 填充了我自己的模型。

我不想以编程方式展开 TreeView。所以我试试这个:

var model = itemsControl_.Items.Select(i => i as MyModel).Where(ftn => ftn != null && ftn.key = searchedKey));

现在我已经建立了一个想要展开的模型。我搜索容器以展开它:

var tvi = itemsControl_.ItemContainerGenerator.ContainerFromItem(model) as TreeViewItem;
 if(tvi!=null)
 {
  if (!tvi.IsExpanded)
  {
   tvi.IsExpanded = true;
  }     
 }

有时tvi 为空!?!

谁能解释一下这怎么可能?

【问题讨论】:

    标签: silverlight silverlight-4.0


    【解决方案1】:

    根据您的描述,您似乎想要扩展 TreeViewItem。 我认为这很可能是由虚拟化引起的。默认情况下,TreeView 的虚拟化附加属性处于启用状态,这意味着如果项目不在视口中,它可能没有获得容器。 如果在 TreeView 上调用 GetContainerFromItem,ItemContainerGenerator 仅搜索 TreeView 的直接子对象。所以需要递归遍历 TreeView 和子 TreeViewItem 对象。更复杂的是,如果 TreeView 将其项目虚拟化(通过将 VirtualizingStackPanel.IsVirtualizing 属性设置为 true 来启用虚拟化),则需要先创建子项目,然后才能检查其数据对象。

    希望这会有所帮助。

    请参考http://blogs.msdn.com/b/wpfsdk/archive/2010/02/23/finding-an-object-treeviewitem.aspx

    问候 迪帕克

    【讨论】:

    • 谢谢回答。我没有启用虚拟化,也不知道如何删除它。但即使我的树视图包含一项,我也会遇到错误。我正在直接子节点中搜索一个项目,所以这不是递归的问题。
    猜你喜欢
    • 2021-08-23
    • 2016-03-13
    • 2021-02-13
    • 2012-04-03
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    相关资源
    最近更新 更多