1

TreeViewルート要素が 1 つの を作成しました。

TreeViewControl treeViewConrol = new TreeViewControl(tvVisual,TreeServiceManager);
TreeNode rootNode=GetRootNode();

次に、このルート要素をツリーに追加しました:

treeViewControl.TreeView.Items.Add(rootNode);

そしてアイテムを見つけようとします:

TreeViewControl.LocateItem(ref treeViewConrol.TreeView, rootNode);

public static  void LocateItem(ref TreeView treeView, object item)
{
    ExpandAndSelectItem(treeView, item);
}

private static bool ExpandAndSelectItem(ItemsControl parentContainer, object itemToSelect)
{
    //check all items at the current level
    foreach (TreeNode item in parentContainer.Items)
    {
        TreeViewItem currentContainer = parentContainer.ItemContainerGenerator.ContainerFromItem(item) as TreeViewItem;

        //if the data item matches the item we want to select, set the corresponding
        //TreeViewItem IsSelected to true
        if (item == itemToSelect && currentContainer != null)
        {
            currentContainer.IsSelected = true;
            currentContainer.BringIntoView();
            currentContainer.Focus();

            //the item was found
            return true;
        }
    }

    //cut part shippet's code. You can find it at blog

    //no item was found
    return false;
}

それで、私がhttp://blog.quantumbitdesigns.comから取ったこのコードスニペット。しかし、行:

TreeViewItem currentContainer = parentContainer.ItemContainerGenerator.ContainerFromItem(item) as TreeViewItem;

は常に null です。

私のポイントは、ルート要素からコンテナーを取得し、その子要素を取得して、要素を見つけてツリーを展開できる間に通過することです。

では、null ではない currentContainer を取得するにはどうすればよいでしょうか。

PS Treeview ContainerFromItem は常に nullを返し、TreeView.ItemContainerGenerator.ContainerFromItem は nullを返します。

4

2 に答える 2