TreeViewItemで`ItemContainerGenerator.ContainerFromItem`が取得できない場合


ユースケース

XAMLのコンストラクタレベルで、TreeViewにアクセスしてExpandやSelectをしたい場合。

問題

TreeView.ItemContainerGenerator.ContainerFromItemでContainerから情報を解決しようとしても、常にnullが返ってきてしまい、処理できない。

対応策

BeginInvokeを使って処理を後ろに回せばいいようです。

TreeViewItem.Dispatcher.BeginInvoke(() =>
{
    TreeViewItem item = TreeView.ItemContainerGenerator.ContainerFromItem(TreeView.Items[0]) as TreeViewItem;
    // TreeViewの操作...
});

おまけ

そういえば、Flexでも同じような事を苦肉の策でしたような。

参考