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を返します。