2009-05-07 20 views

उत्तर

7

WPF TreeView क्लास में ExpandAll विधि नहीं है। इस प्रकार आपको नोड्स के माध्यम से लूप करना होगा और अपने IsExpanded गुणों को सत्य पर सेट करना होगा।

64

यह मदद कर सकता है

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

सरल और प्रभावी प्रयास करें! धन्यवाद! – StinkyCat

+3

ठीक है लेकिन यह समाधान मांग के बजाय लोड समय पर है। – Ahmad

15
XAML Treeview शैली के साथ

आपको लगता है कि क्या इसके बाद के संस्करण में लिखा था की तरह एक संपत्ति सेटर होना चाहिए:

सी फ़ाइल में लिखने के इस तरह के तरीकों, मेरी नमूने में मैं एक बटन का इस्तेमाल किया गया और मेरा वृक्षदृश्य का नाम मेरा टीवी है:

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

user2779123 की टिप्पणी के अलावा और मैं इस लंबे समय से उत्तर दिया गया है लेकिन मैं यह भी सुझाव है कि पियरे-ओलिवर Pignon के कोड धक्का treeItem.IsExpanded सच = पता; न केवल नल की जांच के दायरे में स्थानांतरित किया जा सकता है बल्कि इसे विस्तार प्रक्रिया में ले जाया जा सकता है क्योंकि यह एक प्रारूप में लिखा गया है जो वृक्ष संरचना के विस्तार और ढहने दोनों की अनुमति देता है और इसे वहां ले जाने से रूट नोड्स जोड़ देगा डिजाइन द्वारा कार्यक्षमता।

नीचे दिए गए उदाहरण के अनुसार:

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

आइटम नियंत्रण में नहीं है IsExpanded, लेकिन TreeViewItem है। – Tomas

0

द्वारा @ पियरे-ओलिवर एक अच्छा एक है प्रदान की जवाब।

व्यक्तिगत रूप से, मैं ऐसी परिस्थितियों में रिकर्सन के बजाय एक स्टैक का उपयोग करना पसंद करता हूं, जहां आपको पता नहीं है कि डेटा कितना गहराई से घोंसला हो सकता है। और भी बेहतर, यह एक विस्तार समारोह के रूप में प्रदान किया जा सकता:

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

काम नहीं करता है ... –

-1

इस

private void btnExpandAll_Click(object sender, RoutedEventArgs e) 
{ 
    foreach(var item in tvES.Items) 
    { 
     var tvi = item as TreeViewItem; 
     if (tvi != null) 
      tvi.ExpandSubtree(); 
    } 
} 
संबंधित मुद्दे