¿Hay alguna forma de expandir automáticamente todos los nodos desde una vista en árbol en WPF? Busqué y ni siquiera encontré una función expandir en la propiedad treeview.vista en árbol AutoExpand en WPF
Gracias
¿Hay alguna forma de expandir automáticamente todos los nodos desde una vista en árbol en WPF? Busqué y ni siquiera encontré una función expandir en la propiedad treeview.vista en árbol AutoExpand en WPF
Gracias
Usted puede establecer ItemContainerStyle y usar la propiedad 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>
Si tiene que hacerlo desde el código, puede escribir modelo de vista para sus artículos de vista de árbol, y se unen a la propiedad IsExpanded correspondiente del modelo. Para más ejemplos se refieren a gran artículo de Josh Smith en CodeProject: Respuesta Simplifying the WPF TreeView by Using the ViewModel Pattern
Esto es lo que yo uso:
private void ExpandAllNodes(TreeViewItem rootItem)
{
foreach (object item in rootItem.Items)
{
TreeViewItem treeItem = (TreeViewItem)item;
if (treeItem != null)
{
ExpandAllNodes(treeItem);
treeItem.IsExpanded = true;
}
}
}
Con el fin de que funcione debe llamar a este método en un bucle foreach para el nodo raíz:
// this loop expands all nodes
foreach (object item in myTreeView.Items)
{
TreeViewItem treeItem = (TreeViewItem)item;
if (treeItem != null)
{
ExpandAllNodes(treeItem);
treeItem.IsExpanded = true;
}
}
Hola Carlo. Esto no funcionará si tiene algo diferente de TreeViewItem en su colección de Artículos. Si desea estar seguro de que este enfoque funciona en cualquier caso, debe usar ItemContainerGenerator de su objeto TreeView y llamarlo método ContainerFromItem(). – Anvaka
Tiene razón, la forma en que agrego los elementos a mi vista de árbol es myTree.Items.Add (new TreeViewItem() {Header = myObject}) ;, por eso funciona para mí. Lo siento por ser engañoso. – Carlo
Puede simplificar el código para que sea myTreeView.Items.OfType
de Carlo era mejor, ya que abre todos los niveles
Esta mejora sobre ese ejemplo con un pequeño ejemplo de código más conciso.
private void ExpandAllNodes(TreeViewItem treeItem)
{
treeItem.IsExpanded = true;
foreach (var childItem in treeItem.Items.OfType<TreeViewItem>())
{
ExpandAllNodes(childItem);
}
}
de llamadas mediante el uso de esta línea de código
TreeViewInstance.Items.OfType<TreeViewItem>().ToList().ForEach(ExpandAllNodes);
si desea expandir manualmente se puede tratar
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;
}
Olvidé mencionar que no tengo TreeviewItem, pero diferentes tipos de elementos en mi árbol. –