Это зависит. Как получить объект TreeViewItem, как выглядит дерево (иерархия) и как оно заполняется?
Это привязки данных и виден ли ваш treeViewItem (не внутри свернутого элемента)?
Это код, который я использовал для выбора и расширения данного узла XML.
private void SetSelected(XmlNode node)
{
Stack<XmlNode> path = new Stack<XmlNode>();
XmlDataProvider dp = FindResource("xml") as XmlDataProvider;
XmlNode root = dp.Document.LastChild;
XmlNode n1 = node;
//path.Push(node);
while (n1.ParentNode != root)
{
n1 = n1.ParentNode;
if (n1 == null)
return;
path.Push(n1);
}
path.Push(root);
ItemsControl control = tree;
foreach (XmlNode n in path)
{
TreeViewItem tviItem = control.ItemContainerGenerator.ContainerFromItem(n) as TreeViewItem;
tviItem.IsExpanded = true;
tviItem.UpdateLayout();
control = tviItem;
}
TreeViewItem resultItem = control.ItemContainerGenerator.ContainerFromItem(node) as TreeViewItem;
resultItem.IsSelected = true;
resultItem.Focus();
}
XAML:
<XmlDataProvider x:Key="xml"/>
<TreeView ItemsSource="{Binding Source={StaticResource xml}}" x:Name=tree/>
Этот код сначала выполняет поиск пути к корню от выбранного узла.
(Если у вас есть TreeViewItem вместо XmlNode или любой другой объект, это также работает, за исключением того, что вы используете item.Parent вместо n1.ParentNode)
Затем он идет от корня, расширяет все узлы и обновляет макет (важно).
Наконец, выбранный узел устанавливается как IsSelected = true и получает фокус.