Treeview ContainerFromItem始终返回null

Con*_*cer 7 c# wpf treeview itemcontainergenerator

我已经阅读了关于这个主题的几个主题,但找不到任何可以做我想做的事情.我有一个树视图绑定到一组分层的对象.这些对象中的每一个都代表地图上的图标.当用户单击地图上的其中一个图标时,我想在树状视图中选择项目,将焦点放在其上,然后将其滚动到视图中.map对象具有绑定到treeview的对象列表.在示例中,Thing是绑定到树的对象的类型.

public void ScrollIntoView(Thing t)
{
  if (t != null)
  {
    t.IsSelected = true;
    t.IsExpanded = true;

    TreeViewItem container = (TreeViewItem)(masterTreeView
      .ItemContainerGenerator.ContainerFromItem(t));
    if (container != null)
    {
      container.Focus();
      LogicalTreeHelper.BringIntoView(container);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,无论我尝试过什么,容器总是为空.有任何想法吗?

H.B*_*.B. 9

这个项目实际上是孩子的masterTreeView吗?

这可能实际上非常困难,因为TreeViewItems它们都是ItemsControls自己的ItemContainerGenerator,这意味着你应该只能从直接的父节点ItemContainerGenerator而不是从根节点获取容器.

一些递归函数,首先将层次结构上传到根,然后在ui级别反转此路由,总是获取项目的容器可能会有效,但是您的数据项需要引用它们的逻辑父数据对象.