¿Cómo puedo expandir todos los nodos TreeView en WPF? En WinForms había un método ExpandAll() que hace esto.WPF TreeView: ¿Dónde está el método ExpandAll()
Respuesta
La clase TreeView de WPF no tiene un método ExpandAll. Por lo tanto, tendría que recorrer los nodos y establecer sus propiedades de IsExpanded en verdadero.
Esto podría ayudar
<TreeView>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="True" />
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
con estilo XAML Treeview que debe tener un regulador de propiedad como que lo que escribió más arriba:
En archivo Cs, escribir métodos como éste, en mi muestra i usé un botón y el nombre de mi treeview es myTV:
private void ExpandAll(ItemsControl items, bool expand)
{
foreach (object obj in items.Items)
{
ItemsControl childControl = items.ItemContainerGenerator.ContainerFromItem(obj) as ItemsControl;
if (childControl != null)
{
ExpandAll(childControl, expand);
}
TreeViewItem item = childControl as TreeViewItem;
if (item != null)
item.IsExpanded = true;
}
}
private void btnExpandAll_Click(object sender, RoutedEventArgs e)
{
foreach (object item in this.myTV.Items)
{
TreeViewItem treeItem = this.myTV.ItemContainerGenerator.ContainerFromItem(item) as TreeViewItem;
if (treeItem != null)
ExpandAll(treeItem, true);
treeItem.IsExpanded = true;
}
}
espero que pueda ayudarle.
Además del comentario del usuario2779123 y sé que hace tiempo que fue respondida, pero también sugeriría que el código de Pierre-Olivier Pignon empuje treeItem.IsExpanded = true; no solo se mueve dentro del alcance de la comprobación nula sino que se mueve al procedimiento ExpandAll ya que parece estar escrito en un formato que permite tanto la expansión como el colapso de la estructura de árbol y al mover esto a allí se agregarían los nodos raíz a esta funcionalidad por diseño.
De acuerdo con el siguiente ejemplo:
private void ExpandAll(ItemsControl items, bool expand)
{
items.IsExpanded = expand;
foreach (object obj in items.Items)
{
ItemsControl childControl = items.ItemContainerGenerator.ContainerFromItem(obj) as ItemsControl;
if (childControl != null)
{
ExpandAll(childControl, expand);
}
TreeViewItem item = childControl as TreeViewItem;
if (item != null)
item.IsExpanded = true;
}
}
private void btnExpandAll_Click(object sender, RoutedEventArgs e)
{
foreach (object item in this.myTV.Items)
{
TreeViewItem treeItem = this.myTV.ItemContainerGenerator.ContainerFromItem(item) as TreeViewItem;
if (treeItem != null)
ExpandAll(treeItem, true);
}
}
ItemsControl no tiene .IsExpanded, pero TreeViewItem sí. – Tomas
La respuesta proporcionada por @ Pierre-Olivier es una buena.
Personalmente, prefiero usar una pila en lugar de recursividad en circunstancias como estas en las que no tienes idea de qué tan anidados pueden estar los datos. Aún mejor, se podría proporcionarse como una función de extensión:
public static void ExpandAll(this TreeViewItem treeViewItem, bool isExpanded = true)
{
var stack = new Stack<TreeViewItem>(treeViewItem.Items.Cast<TreeViewItem>());
while(stack.Count > 0)
{
TreeViewItem item = stack.Pop();
foreach(var child in item.Items)
{
var childContainer = child as TreeViewItem;
if(childContainer == null)
{
childContainer = item.ItemContainerGenerator.ContainerFromItem(child) as TreeViewItem;
}
stack.Push(childContainer);
}
item.IsExpanded = isExpanded;
}
}
public static void CollapseAll(this TreeViewItem treeViewItem)
{
treeViewItem.ExpandAll(false);
}
/// <summary>
/// Collapse the TreeView.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void _collapseTreeView_button_Click(object sender, RoutedEventArgs e)
{
_ordersParentChild_TreeView.UpdateLayout();
if (_ordersParentChild_TreeView.Items.Count > 0)
{
var rootTreeViewItem = _ordersParentChild_TreeView.Items[0] as TreeViewItem;
if (rootTreeViewItem != null)
{
rootTreeViewItem.IsExpanded = false;
}
}
}
/// <summary>
/// Expand the TreeView.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void _expandTreeView_button_Click(object sender, RoutedEventArgs e)
{
_ordersParentChild_TreeView.UpdateLayout();
if(_ordersParentChild_TreeView.Items.Count > 0)
{
var rootTreeViewItem = _ordersParentChild_TreeView.Items[0] as TreeViewItem;
if (rootTreeViewItem != null)
{
rootTreeViewItem.ExpandSubtree();
}
}
}
}
No funciona ... –
probar esto
private void btnExpandAll_Click(object sender, RoutedEventArgs e)
{
foreach(var item in tvES.Items)
{
var tvi = item as TreeViewItem;
if (tvi != null)
tvi.ExpandSubtree();
}
}
- 1. ¿Dónde está la propiedad IsSynchronizedWithCurrentItem (o equivalente) para un TreeView?
- 2. WPF TreeView refrescante
- 3. WPF Enlace jerárquico TreeView.
- 4. WPF TreeView Enlace
- 5. WPF TreeView Virtualization
- 6. ¿Dónde está Button.DialogResult en WPF?
- 7. WPF TreeView Borrar selección
- 8. WPF: Stretch treeview
- 9. wpf treeview binding
- 10. WPF: personalizado + - en TreeView
- 11. Cómo alinear el botón en wpf treeview
- 12. WPF TreeView goteando el elemento seleccionado
- 13. WPF Eliminar ScrollViewer de TreeView
- 14. WPF DataBound treeview expand/collapse
- 15. WPF TreeView con selección múltiple
- 16. cómo aplanar un WPF TreeView
- 17. Habilitar desplazamiento para WPF Treeview
- 18. Encabezado de columna para un WPF TreeView
- 19. WPF: TreeView dentro de un ComboBox
- 20. ¿Dónde está el método de inicio de un servicio WCF?
- 21. ¿Dónde está el Método de extensión LINQ "Fold"?
- 22. ¿Dónde está el método Principal en una aplicación de formularios?
- 23. ¿Dónde está el método isAjax() en Play Framework 2.0?
- 24. ¿Dónde está el byte IBuffer []. Método de extensión AsBuffer?
- 25. WPF mantiene una lista de TreeView ordenada
- 26. Líneas entre nodos en WPF TreeView
- 27. Agrupando objetos secundarios en WPF TreeView
- 28. WPF ControlTemplate para desplazarse TreeView Control
- 29. ¿Dónde está el espacio de nombres System.Windows.Forms.Integration?
- 30. Comandos estándar de WPF - ¿Dónde está la salida?
simple y eficaz! ¡Gracias! – StinkyCat
Ok, pero esta solución está en el tiempo de carga en lugar de a pedido. – Ahmad