Я просто пошел бы прямо для рефакторинга в меньшие методы. Если метод является достаточно большим, что ему нужно разбивание как это, ему действительно нужно разбивание в несколько методов если во всем возможный.
При ограничении объема хорошо, это не действительно, для чего именованные блоки. Это неидиоматично, который является очень редко хорошей вещью.
Вы можете установить ItemContainerStyle и использовать свойство IsExpanded.
<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>
Если вам нужно сделать это из кода, вы можете написать модель представления для элементов представления в виде дерева и привязать свойство IsExpanded к соответствующему объекту из модели. Дополнительные примеры см. В замечательной статье Джоша Смита о CodeProject: Упрощение WPF TreeView с помощью шаблона ViewModel
Вот что я использую:
private void ExpandAllNodes(TreeViewItem rootItem)
{
foreach (object item in rootItem.Items)
{
TreeViewItem treeItem = (TreeViewItem)item;
if (treeItem != null)
{
ExpandAllNodes(treeItem);
treeItem.IsExpanded = true;
}
}
}
Чтобы он работал, вы должны вызвать этот метод в цикле foreach для корневого узла:
// this loop expands all nodes
foreach (object item in myTreeView.Items)
{
TreeViewItem treeItem = (TreeViewItem)item;
if (treeItem != null)
{
ExpandAllNodes(treeItem);
treeItem.IsExpanded = true;
}
}