From 9d1660270272180cd71147d6ddd53d1382643d2e Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期一, 02 十一月 2026 18:00:14 +0800
Subject: [PATCH] merge: 并入远程 Initial commit 作为历史根节点

---
 HMI.UI/DpUtil/TreeViewHelper.cs |   85 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 85 insertions(+), 0 deletions(-)

diff --git a/HMI.UI/DpUtil/TreeViewHelper.cs b/HMI.UI/DpUtil/TreeViewHelper.cs
new file mode 100644
index 0000000..5346549
--- /dev/null
+++ b/HMI.UI/DpUtil/TreeViewHelper.cs
@@ -0,0 +1,85 @@
+锘縰sing 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);
+                    }
+                }
+            }
+        }
+    }
+}

--
Gitblit v1.9.1