我得到了ItemsControl
(Treeview
或TreevieItem
)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
为空!?!
有人可以解释一下这是怎么可能的吗?
答案 0 :(得分:0)
根据您的描述,您似乎想要扩展TreeViewItem。 我认为这很可能是由虚拟化引起的。默认情况下,TreeView会启用Virtualizating Attached属性,这意味着如果某个项目不在视口中,则可能无法获得容器。 如果在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
此致 迪帕克