Jak mogę rozwinąć wszystkie węzły TreeView w WPF? W WinForms była metoda ExpandAll(), która to robi.WPF TreeView: Gdzie jest metoda ExpandAll()?
Odpowiedz
Klasa TreeView WPF nie ma metody ExpandAll. W ten sposób będziesz musiał przechodzić przez węzły i ustawić ich właściwości IsExpanded na true.
To może pomóc
<TreeView>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="True" />
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
z XAML stylu TreeView trzeba mieć właściwość setter takiego co napisałem powyżej:
W pliku CS, napisać metod, takich jak ten, w moim próbki i użyłem przycisku, a nazwa mojego drzewa to 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;
}
}
mam nadzieję, że ci to pomoże.
Oprócz komentarza user2779123 i wiem, że już dawno temu udzielono odpowiedzi, ale sugerowałbym również, aby kod Pierre-Oliviera Pignona pchnął drzewoItem.IsExpanded = true; nie tylko zostanie przeniesiony do zakresu kontroli zerowej, ale także przeniesiony do procedury ExpandAll, ponieważ wydaje się, że jest napisany w formacie, który pozwala zarówno na rozbudowę, jak i na zwijanie struktury drzewa, a przeniesienie jej tam spowoduje dodanie węzłów głównych do tego funkcjonalność według projektu.
Jak na poniższym przykładzie:
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 nie ma .IsExpanded, ale TreeViewItem ma. – Tomas
Odpowiedź udzielana przez @ Pierre-Olivier jest dobry.
Osobiście wolę używać stosu zamiast rekursji w takich okolicznościach, w których nie masz pojęcia, jak głęboko mogą być zagnieżdżone dane. Jeszcze lepiej, to może być dostarczony jako funkcję przedłużacza:
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();
}
}
}
}
Nie działa ... –
spróbować
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. Wirtualizacja drzewa WPF TreeView
- 2. WPF: wirtualizacja TreeView nie działa
- 3. Powiąż dowolny dokument XML z WPF TreeView
- 4. WPF TreeView wyciek z wybranego elementu
- 5. Grupowanie obiektów podrzędnych w drzewie WPF TreeView
- 6. Linie między węzłami w drzewie WPF TreeView
- 7. WPF ControlTemplate do przewijania TreeView Control
- 8. Gdzie jest metoda przedłużania LINQ "Fold"?
- 9. Gdzie jest główna metoda w formularzu wniosku?
- 10. Xcode, zobacz gdzie metoda jest używana
- 11. TreeView Virtualization
- 12. Standardowe komendy WPF - gdzie jest wyjście?
- 13. Metoda łańcucha grzbietowego/podkreślenia gdzie metoda
- 14. Jak jest używana metoda getView() i gdzie jest wywoływana?
- 15. Zmiana menu kontekstowego w TreeView WPF dla danych
- 16. WPF TreeView przywraca jej ostrość po podwójnym kliknięciu
- 17. Pliki przeciągnij i upuść WPF na TreeView z Eksploratora Windows
- 18. Jak rozwinąć TreeView WPF za jednym kliknięciem pozycji
- 19. Bind Ikona zależności od Enum w WPF Treeview
- 20. LINQ podmiotom Dołącz + Gdzie Metoda
- 21. WPF MahApps.Metro - Gdzie umieścić ResourceDictionaries?
- 22. Pryzmat WPF - gdzie umieścić zasoby?
- 23. Metoda SendKeys.Send w aplikacji WPF
- 24. dodaj zdjęcie w treeView
- 25. Wielokrotny wybór w TreeView
- 26. Metoda Alamofire.download(): Gdzie jest plik i czy został zapisany pomyślnie?
- 27. Gdzie jest metoda isAjax() w Play Framework 2.0?
- 28. Gdzie jest metoda ExecuteStoreCommand w Entity Framework 5?
- 29. Using class_getInstanceMethod - gdzie jest metoda zaimplementowana w hierarchii klas?
- 30. Drzewo TreeView WPF jest przenoszone do ObservableCollection nie aktualizuje węzłów głównych
Proste i skuteczne! Dzięki! – StinkyCat
OK, ale to rozwiązanie jest w czasie ładowania, a nie na żądanie. – Ahmad