मैं WPF में सभी TreeView नोड्स का विस्तार कैसे कर सकता हूं? WinForms में एक ExpandAll() विधि थी जो यह करता है।WPF TreeView: ExpandAll कहां है() विधि
उत्तर
WPF TreeView क्लास में ExpandAll विधि नहीं है। इस प्रकार आपको नोड्स के माध्यम से लूप करना होगा और अपने IsExpanded गुणों को सत्य पर सेट करना होगा।
यह मदद कर सकता है
<TreeView>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="True" />
</Style>
</TreeView.ItemContainerStyle>
</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;
}
}
उम्मीद है कि यह आपकी मदद कर सकता है।
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);
}
}
आइटम नियंत्रण में नहीं है IsExpanded, लेकिन TreeViewItem है। – Tomas
द्वारा @ पियरे-ओलिवर एक अच्छा एक है प्रदान की जवाब।
व्यक्तिगत रूप से, मैं ऐसी परिस्थितियों में रिकर्सन के बजाय एक स्टैक का उपयोग करना पसंद करता हूं, जहां आपको पता नहीं है कि डेटा कितना गहराई से घोंसला हो सकता है। और भी बेहतर, यह एक विस्तार समारोह के रूप में प्रदान किया जा सकता:
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();
}
}
}
}
काम नहीं करता है ... –
इस
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. WPF TreeView
- 2. WPF Treeview
- 3. WPF TreeView
- 4. WPF treeview
- 5. एक WPF TreeView
- 6. एक WPF TreeView
- 7. WPF TreeView साफ़ चयन
- 8. WPF TreeView चयनित आइटम
- 9. WPF TreeView वर्चुअलाइजेशन
- 10. WPF TreeView बाध्यकारी
- 11. wpf treeview बाध्यकारी
- 12. WPF: कस्टम + - TreeView
- 13. डेटा रीलोड पर WPF TreeView स्थिति सहेजें
- 14. किसी भी XML दस्तावेज़ को WPF TreeView
- 15. बाइंड चिह्न WPF में Enum पर निर्भर करता है Treeview
- 16. एक TreeView के लिए IsSynchronizedWithCurrentItem संपत्ति (या समतुल्य) कहां है?
- 17. TreeView
- 18. TreeView
- 19. बाध्यकारी चयनित Item एक पदानुक्रमित डेटाटाम्प्लेट-लागू WPF TreeView
- 20. एक WPF TreeView बनाएं, रीफ्रेश करें और XAML
- 21. TreeNode.Handle Treeview
- 22. डेटा के लिए WPF TreeView में संदर्भ मेनू बदलें
- 23. एक WPF हाइब्रिड कंट्रोल (TreeView + DataGrid = DataTreeGrid) बनाना
- 24. WPF एकल माउस क्लिक पर TreeView का विस्तार करें
- 25. WPF: संभाल संपादन योग्य श्रेणीबद्ध डेटा/TreeView ~ डेटा ग्रिड संकर
- 26. WPF-प्रिज्म CanExecute विधि
- 27. एक TreeView
- 28. TreeView खोज
- 29. मैं TreeView
- 30. JQuery Treeview
सरल और प्रभावी प्रयास करें! धन्यवाद! – StinkyCat
ठीक है लेकिन यह समाधान मांग के बजाय लोड समय पर है। – Ahmad