2009-05-07 24 views

cevap

7

WPF TreeView sınıfında bir ExpandAll yöntemi yoktur. Böylece, düğümler arasında geçiş yapıp IsExpanded özelliklerini true olarak ayarlamanız gerekir.

64

Bu

XAML Treeview tarzı ile
<TreeView> 
    <TreeView.ItemContainerStyle> 
     <Style TargetType="{x:Type TreeViewItem}"> 
      <Setter Property="IsExpanded" Value="True" /> 
     </Style> 
    </TreeView.ItemContainerStyle> 
</TreeView> 
+1

Basit ve etkili deneyin! Teşekkürler! – StinkyCat

+3

Tamam, ancak bu çözüm talep yerine yükleme süresinde. – Ahmad

15

yukarıda yazdıklarımı böyle bir özellik ayarlayıcı olmalıdır yardımcı olabilir: Benim numunede, Cs dosyasında

, böyle yöntemleri yazmak i bir düğme kullandı ve benim treeview'ımın adı, benim size yardımcı olabileceğini umuyorum:

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; 
     } 
    } 

.

1

Kullanıcı2779123'ün yorumuna ek olarak ve bunun uzun zamandır cevaplandığını biliyorum ama aynı zamanda Pierre-Olivier Pignon kodunun treeItem.IsExpanded = true; sadece null çekinin kapsamına taşınmakla kalmaz, aynı zamanda ExpandAll prosedürüne taşıyarak, hem ağaç yapısının hem genişlemesine hem de daraltılmasına izin veren bir formatta yazıldığından ve bu noktaya taşınırken kök düğümler buna eklenecektir. tasarım gereği işlevsellik. Aşağıdaki örnek uyarınca

:

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); 
    } 
} 
+0

ItemsControl yok .IsExpanded, ancak TreeViewItem sahip. – Tomas

0

Pierre-Olivier iyi biridir @ tarafından sağlanan yanıt.

Şahsen, verilerin ne kadar derinlemesine yerleştirilebileceği konusunda hiçbir fikriniz olmadığı durumlarda özyineleme yerine yığıt kullanmayı tercih ederim. Daha da iyisi, bir uzantısı fonksiyonu olarak temin edilebilir:

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); 
} 
-1
/// <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(); 
      } 
     } 
    } 
} 
+0

Çalışmıyor ... –

-1

bu

private void btnExpandAll_Click(object sender, RoutedEventArgs e) 
{ 
    foreach(var item in tvES.Items) 
    { 
     var tvi = item as TreeViewItem; 
     if (tvi != null) 
      tvi.ExpandSubtree(); 
    } 
}