TreeViewItem.ExpandSubtree 方法

定义

展开 TreeViewItem 控件及其所有子 TreeViewItem 元素。

public:
 void ExpandSubtree();
public void ExpandSubtree ();
member this.ExpandSubtree : unit -> unit
Public Sub ExpandSubtree ()

示例

以下示例演示如何查找所选 TreeViewItem 项并展开它及其所有子项。 以下 XAML 创建一个 TreeView 并用一些数据填充它。

<StackPanel>
  <StackPanel.Resources>
    <XmlDataProvider x:Key="myCompany" XPath="Company/Employee">
      <x:XData>
        <Company xmlns="">
          <Employee Name="Don Hall">
            <Employee Name="Alice Ciccu">
              <Employee Name="David Pelton">
                <Employee Name="Vivian Atlas"/>
              </Employee>
              <Employee Name="Jeff Price">
                <Employee Name="Kari Hensien"/>
              </Employee>
              <Employee Name="Andy Jacobs"/>
            </Employee>
            <Employee Name="Bill Malone">
              <Employee Name="Maurice Taylor">
                <Employee Name="Sunil Uppal">
                  <Employee Name="Qiang Wang"/>
                </Employee>
              </Employee>
            </Employee>
          </Employee>
        </Company>
      </x:XData>
    </XmlDataProvider>

    <!-- Bind the HierarchicalDataTemplate.ItemsSource property to the employees under
         each Employee element. -->
    <HierarchicalDataTemplate x:Key="EmployeeTemplate" 
                              ItemsSource="{Binding XPath=Employee}">
      <TextBlock Text="{Binding XPath=@Name}"/>
    </HierarchicalDataTemplate>

  </StackPanel.Resources>
  <TreeView Name="treeView1"
            ItemsSource="{Binding Source={StaticResource myCompany}}" 
            ItemTemplate="{StaticResource EmployeeTemplate}"/>
  <Button Name="expandSelect" 
            Margin="5,0,0,0"
            Content="Expand _Selected Item"
            Click="expandSelected_Click"/>

</StackPanel>

以下代码遍历 TreeView 查找所选 TreeViewItem 项,然后调用 ExpandSubtree 以显示所选 TreeViewItem的所有子项。

备注

该方法 GetTreeViewItem 仅适用于 TreeViewItem 未虚拟化的控件。 若要了解如何查找 TreeViewItem 可能虚拟化的内容,请参阅 “如何:在 TreeView 中查找 TreeViewItem”。

private void expandSelected_Click(object sender, RoutedEventArgs e)
{
    if (treeView1.SelectedItem == null)
    {
        return;
    }

    TreeViewItem tvi = GetTreeViewItem(treeView1, treeView1.SelectedItem);

    if (tvi != null)
    {
        tvi.ExpandSubtree();
    }
}

// Traverse the TreeView to find the TreeViewItem 
// that corresponds to the selected item.
private TreeViewItem GetTreeViewItem(ItemsControl parent, object item)
{
    // Check whether the selected item is a direct child of 
    // the parent ItemsControl.
    TreeViewItem tvi =
        parent.ItemContainerGenerator.ContainerFromItem(item) as TreeViewItem;

    if (tvi == null)
    {
        // The selected item is not a child of parent, so check
        // the child items of parent.
        foreach (object child in parent.Items)
        {
            TreeViewItem childItem = 
                parent.ItemContainerGenerator.ContainerFromItem(child) as TreeViewItem;

            if (childItem != null)
            {
                // Check the next level for the appropriate item.
                tvi = GetTreeViewItem(childItem, item);
            }
        }
    }
    return tvi;
}
Private Sub expandSelected_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    If treeView1.SelectedItem Is Nothing Then
        Exit Sub
    End If

    Dim tvi As TreeViewItem =
        GetTreeViewItem(treeView1, treeView1.SelectedItem)

    If tvi IsNot Nothing Then
        tvi.ExpandSubtree()
    End If
End Sub

' Traverse the TreeView to find the TreeViewItem 
' that corresponds to the selected item. 
Private Function GetTreeViewItem(ByVal parent As ItemsControl,
                                 ByVal item As Object) As TreeViewItem

    ' Check whether the selected item is a direct child of 
    ' the parent ItemsControl. 
    Dim tvi As TreeViewItem =
        TryCast(parent.ItemContainerGenerator.ContainerFromItem(item), TreeViewItem)

    If tvi Is Nothing Then
        ' The selected item is not a child of parent, so check 
        ' the child items of parent. 
        For Each child As Object In parent.Items
            Dim childItem As TreeViewItem =
                TryCast(parent.ItemContainerGenerator.ContainerFromItem(child), TreeViewItem)

            If childItem IsNot Nothing Then
                ' Check the next level for the appropriate item. 
                tvi = GetTreeViewItem(childItem, item)
            End If
        Next
    End If
    Return tvi
End Function

适用于