C’est ballot mais contrairement à Windows Forms, il n’y a pas un support direct de la sélection d’un item dans une treeview WPF.
Toutefois, la solution est relativement simple, puisqu’elle passe par la fonctionnalité des treeviews qui permet de récupérer les TreeViewItems depuis les objets liés : ItemContainerGenerator.
Ainsi, en respectant la hierarchie de la treeview on peut parcourir l’arbre à la recherche du container de l’item.
Cela donne donc le code suivant:
public static bool SetSelected(ItemsControl parent, object child)
{
if (parent == null || child == null)
{
return false;
}
TreeViewItem childNode = parent.ItemContainerGenerator.ContainerFromItem(child) as TreeViewItem;
if (childNode != null)
{
childNode.Focus();
return childNode.IsSelected = true;
}
if (parent.Items.Count > 0)
{
foreach (object childItem in parent.Items)
{
ItemsControl childControl = parent.ItemContainerGenerator.ContainerFromItem(childItem)
as ItemsControl;
if (SetSelected(childControl, child))
{
return true;
}
}
}
return false;
}
Et le tour est joué.
.Net, WPF