AutoExpand treeview in WPF AutoExpand treeview in WPF wpf wpf

AutoExpand treeview in WPF


You can set ItemContainerStyle and use IsExpanded property.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">   <Grid>      <TreeView>         <TreeView.ItemContainerStyle>            <Style TargetType="{x:Type TreeViewItem}">               <Setter Property="IsExpanded" Value="True"/>            </Style>         </TreeView.ItemContainerStyle>         <TreeViewItem Header="Header 1">            <TreeViewItem Header="Sub Item 1"/>         </TreeViewItem>         <TreeViewItem Header="Header 2">            <TreeViewItem Header="Sub Item 2"/>         </TreeViewItem>      </TreeView>   </Grid></Page>

If you need to do this from code, you can write viewmodel for your tree view items, and bind IsExpanded property to corresponding one from model. For more examples refer to great article from Josh Smith on CodeProject: Simplifying the WPF TreeView by Using the ViewModel Pattern


This is what I use:

private void ExpandAllNodes(TreeViewItem rootItem){    foreach (object item in rootItem.Items)    {        TreeViewItem treeItem = (TreeViewItem)item;        if (treeItem != null)        {            ExpandAllNodes(treeItem);            treeItem.IsExpanded = true;        }    }}

In order for it to work you must call this method in a foreach loop for the root node:

// this loop expands all nodesforeach (object item in myTreeView.Items){    TreeViewItem treeItem = (TreeViewItem)item;    if (treeItem != null)    {        ExpandAllNodes(treeItem);        treeItem.IsExpanded = true;    }}


if you want expand manually you can try

Xaml:

<TreeView x:Name="TreePeople">    <TreeView.ItemContainerStyle>        <Style TargetType="{x:Type TreeViewItem}">            <Setter Property="IsExpanded" Value="True" />        </Style>    </TreeView.ItemContainerStyle></TreeView> 

c#:

bool Expanded = false; // The event subscription method (for a button click)private void ButtonExpand__Click(object sender, RoutedEventArgs e){    Expanded = !Expanded;    Style Style = new Style    {        TargetType = typeof(TreeViewItem)    };    Style.Setters.Add(new Setter(TreeViewItem.IsExpandedProperty, Expanded));    TreePeople.ItemContainerStyle = Style;}