Я попробовал решение, предоставленное здесь: "TreeView выбранный элемент при удалении узлов" , и в простом приложении оно прекрасно работает. Излишне говорить, что в приложении я работаю над ним не ...
Глядя на то, о чем говорится в статье, мне кажется, мне нужен TreeViewItem, который является контейнером моего элемента. Итак, я попробовал:
m_tree.ItemContainerGenerator.ContainerFromItem
За исключением того, что всегда возвращает ноль. Затем я прочитал следующее: TreeView.ItemContainerGenerator.ContainerFromItem возвращает ноль , и в этот момент мой мозг чуть не перегорел предохранитель!
Кажется, что я получаю доступ к TreeViewItem, который я хочу выбрать, я должен начать с вершины своей иерархии и работать вниз по дереву, пока не доберусь до того места, где я хочу. Итак, мои данные контейнера имеют свойство Parent, поэтому я создал стек объектов:
Stack<Containerl> stack = new Stack<Container>();
Container toBeSelected = ... my object to be selected after deletion ...
while (toBeSelected != null)
{
stack.Push(toBeSelected);
toBeSelected = toBeSelected.Parent;
}
затем я удаляю все элементы из моей иерархии, затем делаю следующее:
TreeViewItem item = m_tree.ItemContainerGenerator.ContainerFromItem(stack.Pop()) as TreeViewItem;
while(item != null && (stack.Count > 0))
{
item = item.ItemContainerGenerator.ContainerFromItem(stack.Pop()) as TreeViewItem;
}
// Force this item to be selected, and set focus
item.IsSelected = true;
item.Focus();
Работает !!!