WPF'deki tüm TreeView düğümlerini nasıl genişletebilirim? WinForms'da bunu yapan bir ExpandAll() yöntemi vardı.WPF TreeView: ExpandAll() yöntemi nerede
cevap
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.
Bu
XAML Treeview tarzı ile<TreeView>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="True" />
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
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;
}
}
.
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);
}
}
ItemsControl yok .IsExpanded, ancak TreeViewItem sahip. – Tomas
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);
}
/// <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();
}
}
}
}
Çalışmıyor ... –
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();
}
}
- 1. WPF TreeView
- 2. WPF TreeView içindeki düğümler arasındaki çizgiler TreeView
- 3. WPF TreeView hiyerarşik bağlayıcı.
- 4. WPF: Stretch treeview
- 5. WPF: Özel + - TreeView içinde
- 6. WPF Treeview silme işlemi
- 7. WPF bir TreeView listesini saklama sıralanmış
- 8. Bir HierarchicalDataTemplate uygulanmış WPF TreeView SelectedItem Bağlama
- 9. görüntelemek treeView
- 10. WPF Clip Art'ı nerede bulabilirim?
- 11. WPF DataTrigger aracından arama yöntemi
- 12. WPF-Prism CanExecute yöntemi çağrılmadı
- 13. (WPF VB.Net) TreeView içine yerleştirilmiş bir Checkbox durumu nasıl alınır?
- 14. Veri için WPF TreeView içindeki içerik menüsünü değiştir
- 15. WPF C# TreeView içindeki bir çocuğun üst düğümünü edinin
- 16. NHibernate 3.1 Oturum Sorgulama Yöntemi Nerede?
- 17. Entity Framework 5'deki ExecuteStoreCommand yöntemi nerede?
- 18. Yerel WPF denetimleri için Generic.xaml nerede bulunur?
- 19. Delphi treeview seçimi kayboluyor
- 20. Sanal Treeview nasıl kurulur?
- 21. Bootstrap treeview node geçişi
- 22. TreeView etiket düzenleme sorusu
- 23. jQuery treeview ile gösterilebilir
- 24. JavaFx TreeView öğesi POJO
- 25. Wpf
- 26. Düğümde düğmenin Treeview bağlaması CanExecute issue
- 27. SelectedItem öğesini TreeView sitesinden kaldırma
- 28. treeView vs MVVM dinamik ContextMenu
- 29. Düğmeleri Bootstrap Treeview Düğümüne ekleyin
- 30. TreeView, HierarchicalDataTemplate ve özyinel Veriler
Basit ve etkili deneyin! Teşekkürler! – StinkyCat
Tamam, ancak bu çözüm talep yerine yükleme süresinde. – Ahmad