データバインドされた TreeView があります。TreeViewItems を拡張したいのですが、深さは 3 としましょう。
通常、私は TreeViewItem.ExpandSubtree() を発行しますが、それはすべてを展開するので、かなり単純なはずなので、自分で作ってみましたか?
これが私が試したものです。以下のメソッドを作成し、ツリービュー ItemContainerGenerator とツリービューの項目コレクションを深さ 3 で渡します。
private void ExpandTree(ItemContainerGenerator gen, ItemCollection items, int depth)
{
depth--;
foreach (var item in items)
{
TreeViewItem itm = (TreeViewItem)gen.ContainerFromItem(item);
if (itm == null) continue;
itm.IsExpanded = true;
if(depth!=0 && itm.Items.Count > 0) ExpandTree(itm.ItemContainerGenerator,itm.Items,depth);
}
}
問題は、最初にすべてのサブアイテムの ItemContainerGenerator を再帰的にコールバックすると、ステータスが「NotStarted」になり、呼び出されるたびに null が返されることです。ヌルをトラップしている間、ツリーは必要な深さ 3 ではなく深さ 1 までしか開かないことを意味します。
ここで何が欠けていますか?