How to get TreeViewItem from HierarchicalDataTemplate item?

前端 未结 11 1444
失恋的感觉
失恋的感觉 2020-12-02 11:34

I have a TreeView which uses a HierarchicalDataTemplate to bind its data.

It looks like this:



        
11条回答
  •  余生分开走
    2020-12-02 12:00

    A single 'ItemContainerGenerator.ContainerFromItem' or 'ItemContainerGenerator.ItemContainerGenerator' call cannot find the TreeViewItem associated by tree view object, since the separation of tree view item controller and tree view item data. It is necessary to create a recursive function to use 'ItemContainerGenerator.ContainerFromItem' and 'ItemContainerGenerator.ItemContainerGenerator', to locate TreeViewItem in tree view. Example recursive function could look like:

    private TreeViewItem GetTreeViewItemFromObject(ItemContainerGenerator container, object tvio)
    {
        var item = container.ContainerFromItem(tvio) as TreeViewItem;
        if (item != null)
        {
            return item;
        }
    
        for (int i = 0; i < container.Items.Count; i++)
        {
            var subContainer = (TreeViewItem)container.ContainerFromIndex(i);
            if (subContainer != null)
            {
                item = GetTreeViewItemFromObject(subContainer.ItemContainerGenerator, tvio);
                if (item != null)
                {
                    return item;
                }
            }
        }
    
        return null;
    }
    

    called by var target = GetTreeViewItemFromObject(treeView.ItemContainerGenerator, item);

    The recursive function only works after tree view's 'ItemContainerGenerator.Status' is 'ContainersGenerated'. So during the initialization view period, 'GetTreeViewItemFromObject' does not work.

提交回复
热议问题