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/Controls/treegrid/Controls/TreeDataGrid.cs |   83 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 83 insertions(+), 0 deletions(-)

diff --git a/HMI.UI/Controls/treegrid/Controls/TreeDataGrid.cs b/HMI.UI/Controls/treegrid/Controls/TreeDataGrid.cs
new file mode 100644
index 0000000..8dc00d4
--- /dev/null
+++ b/HMI.UI/Controls/treegrid/Controls/TreeDataGrid.cs
@@ -0,0 +1,83 @@
+锘縰sing System;
+using System.Collections;
+using System.Windows;
+using System.Windows.Controls;
+
+namespace HMI.UI
+{
+    public class TreeDataGrid : DataGrid
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public event EventHandler<bool> ExpandedChange;
+
+        public virtual void OnExpandedChange(bool expand)
+        {
+            ExpandedChange?.Invoke(this, expand);
+        }
+
+        static TreeDataGrid()
+        {
+            ScrollViewer.HorizontalScrollBarVisibilityProperty
+                .OverrideMetadata(typeof(TreeDataGrid), new FrameworkPropertyMetadata(ScrollBarVisibility.Disabled));
+            ScrollViewer.VerticalScrollBarVisibilityProperty
+                .OverrideMetadata(typeof(TreeDataGrid), new FrameworkPropertyMetadata(ScrollBarVisibility.Disabled));
+        }
+
+        protected override DependencyObject GetContainerForItemOverride()
+        {
+            return new TreeDataGridRow();
+        }
+
+        protected override void OnItemsSourceChanged(IEnumerable oldValue, IEnumerable newValue)
+        {
+            base.OnItemsSourceChanged(oldValue, newValue);
+        }
+    }
+
+    public class TreeDataGridRow : DataGridRow
+    {
+
+        public TreeDataGridRow()
+        {
+            this.DataContextChanged += TreeGridItem_DataContextChanged;
+        }
+
+        private void TreeGridItem_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
+        {
+            if (e.OldValue != null && e.OldValue is TreeItemData oldTreeData)
+            {
+                oldTreeData.IsExpandedChange -= DataIsExpandedChange;
+                oldTreeData.VisibleChange -= DataVisiableChange;
+            }
+            if (DataContext != null && DataContext is TreeItemData treeData)
+            {
+                Visibility = treeData.IsVisible ? Visibility.Visible : Visibility.Collapsed;
+                treeData.IsExpandedChange += DataIsExpandedChange;
+                treeData.VisibleChange += DataVisiableChange;
+            }
+        }
+
+        private void DataIsExpandedChange(object sender, bool IsExpanded)
+        {
+            object parent = ItemsControl.ItemsControlFromItemContainer(this);
+            if (sender is TreeItemData tid)
+            {
+                foreach (var data in tid.Items)
+                {
+                    data.IsVisible = IsExpanded;
+                }
+            }
+        }
+
+        private void DataVisiableChange(object sender, bool visiable)
+        {
+            this.Visibility = visiable ? Visibility.Visible : Visibility.Collapsed;
+            //if (parent != null && parent is TreeDataGrid treeDataGrid)
+            //{
+            //    treeDataGrid.OnExpandedChange(visiable);
+            //}
+        }
+    }
+}

--
Gitblit v1.9.1