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/GridHelper.cs |  229 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 229 insertions(+), 0 deletions(-)

diff --git a/HMI.UI/DpUtil/GridHelper.cs b/HMI.UI/DpUtil/GridHelper.cs
new file mode 100644
index 0000000..b650dc8
--- /dev/null
+++ b/HMI.UI/DpUtil/GridHelper.cs
@@ -0,0 +1,229 @@
+锘縰sing System.Collections.Generic;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Media;
+
+namespace HMI.UI.DpUtil
+{
+    public class GridHelper
+    {
+        #region Space
+        public static double GetSpace(DependencyObject obj)
+        {
+            return (double)obj.GetValue(SpaceProperty);
+        }
+        public static void SetSpace(DependencyObject obj, double value)
+        {
+            obj.SetValue(SpaceProperty, value);
+        }
+
+        public static readonly DependencyProperty SpaceProperty =
+            DependencyProperty.RegisterAttached("Space", typeof(double), typeof(Grid),
+                new PropertyMetadata(0d, OnSpaceChanged));
+
+        public static string GetSpaceIgnore(DependencyObject obj)
+        {
+            return (string)obj.GetValue(SpaceIgnoreProperty);
+        }
+        public static void SetSpaceIgnore(DependencyObject obj, string value)
+        {
+            obj.SetValue(SpaceIgnoreProperty, value);
+        }
+
+        public static readonly DependencyProperty SpaceIgnoreProperty =
+            DependencyProperty.RegisterAttached("SpaceIgnore", typeof(string), typeof(Grid),
+                new PropertyMetadata(null, OnSpaceChanged));
+
+        private static void OnSpaceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+        {
+            if (d is Grid grid)
+            {
+                if (e.Property == SpaceProperty)
+                {
+                    grid.Loaded += GridSpaceOnLoaded;
+                    return;
+                }
+            }
+        }
+
+        private static void GridSpaceOnLoaded(object sender, RoutedEventArgs e)
+        {
+            if (!(sender is Grid grid)) return;
+            RefreshGridSpace(grid);
+            grid.Loaded -= GridSpaceOnLoaded;
+        }
+
+        public static void RefreshGridSpace(Grid grid)
+        {
+            double space = GetSpace(grid);
+            if (space <= 0)
+            {
+                return;
+            }
+
+            bool ignoreTop = false, ignoreBottom = false, ignoreLeft = false, ignoreRight = false;
+            string baseData = GetSpaceIgnore(grid) ?? "";
+            if (baseData.Contains("ALL"))
+            {
+                ignoreTop = true;
+                ignoreBottom = true;
+                ignoreLeft = true;
+                ignoreRight = true;
+            }
+
+            if (baseData.Contains("LEFT"))
+            {
+                ignoreLeft = true;
+            }
+            if (baseData.Contains("RIGHT"))
+            {
+                ignoreRight = true;
+            }
+            if (baseData.Contains("TOP"))
+            {
+                ignoreTop = true;
+            }
+            if (baseData.Contains("BOTTOM"))
+            {
+                ignoreBottom = true;
+            }
+
+            var rowCount = grid.RowDefinitions.Count;
+            rowCount = rowCount <= 0 ? 1 : rowCount;
+            var columnCount = grid.ColumnDefinitions.Count;
+            columnCount = columnCount <= 0 ? 1 : columnCount;
+            int totalCount = rowCount * columnCount;
+
+            if (grid.Children == null) return;
+            foreach (FrameworkElement cell in grid.Children)
+            {
+                int row = Grid.GetRow(cell);
+                int col = Grid.GetColumn(cell);
+                int rowSpan = Grid.GetRowSpan(cell);
+                int colSpan = Grid.GetColumnSpan(cell);
+
+                double left = (col == 0 && ignoreLeft) ? 0 : space;
+                double top = (row == 0 && ignoreTop) ? 0 : space;
+
+                double right = ignoreRight ? 0 : ((col + colSpan == columnCount) ? space : 0);
+                double bottom = ignoreBottom ? 0 : ((row + rowSpan == rowCount) ? space : 0);
+                cell.Margin = new Thickness(left, top, right, bottom);
+
+                //cell.Margin = new Thickness(space,
+                //    space,
+                //    (col + colSpan) == columnCount ? space : 0,
+                //    (row + rowSpan) == rowCount ? space : 0);
+            }
+        }
+        #endregion
+
+        public static Brush GetInnerBorderBrush(Grid obj)
+        {
+            return (Brush)obj.GetValue(InnerBorderBrushProperty);
+        }
+        public static void SetInnerBorderBrush(Grid obj, Brush value)
+        {
+            obj.SetValue(InnerBorderBrushProperty, value);
+        }
+        public static readonly DependencyProperty InnerBorderBrushProperty =
+            DependencyProperty.RegisterAttached("InnerBorderBrush", typeof(Brush), typeof(GridHelper),
+                new PropertyMetadata(null, OnInnerBorderChanged));
+
+        public static double GetInnerBorder(Grid obj)
+        {
+            var sb = obj.GetValue(InnerBorderProperty);
+            return double.Parse(sb.ToString());
+        }
+
+        public static void SetInnerBorder(Grid obj, object value)
+        {
+            double dv = double.Parse(value.ToString());
+            obj.SetValue(InnerBorderProperty, dv);
+        }
+
+        public static readonly DependencyProperty InnerBorderProperty =
+            DependencyProperty.RegisterAttached("InnerBorder", typeof(object), typeof(GridHelper),
+                new PropertyMetadata(0, OnInnerBorderChanged));
+
+        public static string GetInnerBorderIgnore(Grid obj)
+        {
+            return (string)obj.GetValue(InnerBorderIgnoreProperty);
+        }
+        public static void SetInnerBorderIgnore(Grid obj, string value)
+        {
+            obj.SetValue(InnerBorderIgnoreProperty, value);
+        }
+
+        public static readonly DependencyProperty InnerBorderIgnoreProperty =
+            DependencyProperty.RegisterAttached("InnerBorderIgnore", typeof(string),
+                typeof(GridHelper), new PropertyMetadata("None", OnInnerBorderChanged));
+
+        private static void OnInnerBorderChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+        {
+            if (d is Grid grid)
+            {
+                if (e.Property == InnerBorderProperty || e.Property == InnerBorderIgnoreProperty)
+                {
+                    grid.Loaded += GridInnerBorder_Loaded;
+                    return;
+                }
+            }
+        }
+
+        private static void GridInnerBorder_Loaded(object sender, RoutedEventArgs e)
+        {
+            Grid grid = sender as Grid;
+            RefreshGridInnerBorder(grid);
+            grid.Loaded -= GridInnerBorder_Loaded;
+        }
+
+        public static void RefreshGridInnerBorder(Grid grid)
+        {
+            double width = GetInnerBorder(grid);
+            if (width <= 0) return;
+            var rowCount = grid.RowDefinitions.Count;
+            var columnCount = grid.ColumnDefinitions.Count;
+            int totalCount = rowCount * columnCount;
+
+            string baseData = GetInnerBorderIgnore(grid);
+            HashSet<string> data = new HashSet<string>(baseData.Split(','));
+            bool ignoreTop = data.Contains("All") || data.Contains("Top"),
+                ignoreBottom = data.Contains("All") || data.Contains("Bottom"),
+                ignoreLeft = data.Contains("All") || data.Contains("Left"),
+                ignoreRight = data.Contains("All") || data.Contains("Right");
+
+            foreach (var child in grid.Children)
+            {
+                if (child is Control control)
+                {
+                    Thickness bt;
+                    Brush bb = GetInnerBorderBrush(grid) ?? Brushes.Black;
+
+
+                    if (GetSpace(grid) > width)
+                    {
+                        bt = new Thickness(width);
+                    }
+                    else
+                    {
+                        int row = Grid.GetRow(control),
+                           col = Grid.GetColumn(control),
+                           rowSpan = Grid.GetRowSpan(control),
+                           colSpan = Grid.GetColumnSpan(control);
+
+                        double left = (col == 0 && ignoreLeft) ? 0 : width;
+                        double top = (row == 0 && ignoreTop) ? 0 : width;
+
+                        double right = ignoreRight ? 0 : ((col + colSpan == columnCount) ? width : 0);
+                        double bottom = ignoreBottom ? 0 : ((row + rowSpan == rowCount) ? width : 0);
+
+                        bt = new Thickness(left, top, right, bottom);
+                    }
+                    control.BorderBrush = bb;
+                    control.BorderThickness = bt;
+                }
+            }
+        }
+    }
+}

--
Gitblit v1.9.1