using System;
|
using System.ComponentModel;
|
using System.Windows;
|
using System.Windows.Controls;
|
|
namespace HMI.UI.DpUtil
|
{
|
public class TreeViewHelper
|
{
|
public static bool GetAutoExpand(TreeView treeView)
|
{
|
return (bool)treeView.GetValue(AutoExpandProperty);
|
}
|
|
public static void SetAutoExpand(TreeView treeView, bool value)
|
{
|
treeView.SetValue(AutoExpandProperty, value);
|
}
|
|
public static readonly DependencyProperty AutoExpandProperty =
|
DependencyProperty.RegisterAttached("AutoExpand", typeof(bool), typeof(TreeViewHelper),
|
new PropertyMetadata(false, (d, e) =>
|
{
|
if (!(d is TreeView treeView)) return;
|
if ((bool)e.NewValue)
|
{
|
var dpd = DependencyPropertyDescriptor.FromProperty(ItemsControl.ItemsSourceProperty, typeof(DataGrid));
|
dpd?.AddValueChanged(treeView, TreeView_ItemSourceChanged);
|
}
|
else
|
{
|
var dpd = DependencyPropertyDescriptor.FromProperty(ItemsControl.ItemsSourceProperty, typeof(DataGrid));
|
dpd?.RemoveValueChanged(treeView, TreeView_ItemSourceChanged);
|
}
|
}));
|
|
private static void TreeView_ItemSourceChanged(object sender, EventArgs e)
|
{
|
TreeView tree = sender as TreeView;
|
if (!tree.IsLoaded)
|
{
|
tree.Loaded += Tree_Loaded;
|
}
|
else
|
{
|
ExpandAll(tree);
|
}
|
}
|
|
private static void Tree_Loaded(object sender, RoutedEventArgs e)
|
{
|
TreeView tree = sender as TreeView;
|
ExpandAll(tree);
|
tree.Loaded -= Tree_Loaded;
|
}
|
|
public static void ExpandAll(TreeView treeView)
|
{
|
foreach (var item in treeView.Items)
|
{
|
var temp = treeView.ItemContainerGenerator.ContainerFromItem(item);
|
if (temp is TreeViewItem treeViewItem)
|
{
|
ExpandTreeViewItem(treeViewItem);
|
}
|
}
|
}
|
public static void ExpandTreeViewItem(TreeViewItem item)
|
{
|
item.IsExpanded = true;
|
// 确保子项已经生成
|
item.ApplyTemplate();
|
if (item.Items.Count > 0)
|
{
|
foreach (var subItem in item.Items)
|
{
|
if (item.ItemContainerGenerator.ContainerFromItem(subItem) is TreeViewItem childItem)
|
{
|
ExpandTreeViewItem(childItem);
|
}
|
}
|
}
|
}
|
}
|
}
|