wenxiangchao
3 天以前 b544d5cccd76735e034c8055918a50927b437474
HMI.UI/DpUtil/UniformGridHelper.cs
@@ -92,7 +92,7 @@
                if (child is Control control)
                {
                    int col = i % columnCount;
                    int row = i / columnCount;
@@ -108,6 +108,130 @@
                    control.BorderThickness = bt;
                }
                if (child is Border border)
                {
                    int col = i % columnCount;
                    int row = i / columnCount;
                    double left = (col == 0 && ignoreLeft) ? 0 : width;
                    double top = (row == 0 && ignoreTop) ? 0 : width;
                    double right = ignoreRight ? 0 : ((col == columnCount - 1) ? width : 0);
                    double bottom = ignoreBottom ? 0 : ((row == rowCount - 1) ? width : 0);
                    var bt = new Thickness(left, top, right, bottom);
                    border.BorderBrush = brush;
                    border.BorderThickness = bt;
                }
            }
        }
        public static void RefreshLineSize(UniformGrid grid)
        {
            Thickness parentThickness = default;
            Brush brush = default;
            var parent = grid.Parent;
            if (parent is System.Windows.Controls.Control parentControl)
            {
                parentThickness = parentControl.BorderThickness;
                brush = parentControl.BorderBrush;
            }
            else if (parent is Border border)
            {
                parentThickness = border.BorderThickness;
                brush = border.BorderBrush;
            }
            //var value = GetLineSize(grid);
            //if (value == null) return;
            //double size = (double)value;
            int totalCount = grid.Children.Count;
            var columnCount = grid.Columns;
            int rowCount = grid.Rows;
            for (int i = 0; i < totalCount; i++)
            {
                int row = i / columnCount;
                int rest = i % columnCount;
                var cell = grid.Children[i];
                var bt = new Thickness(rest == 0 ? 0 : parentThickness.Left,
                    row == 0 ? 0 : parentThickness.Top,
                    rest == columnCount - 1 ? 0 : parentThickness.Right,
                    row == rowCount - 1 ? 0 : parentThickness.Bottom);
                if (cell is Control child)
                {
                    child.BorderThickness = bt;
                    child.BorderBrush = brush;
                }
            }
        }
        public static void RefreshDefault(UniformGrid grid, ControlTemplate template)
        {
            int totalCount = grid.Columns * grid.Rows;
            int rest = totalCount - grid.Children.Count;
            if (rest <= 0) return;
            for (int i = 0; i < rest; i++)
            {
                var control = new Control
                {
                    Template = template
                };
                grid.Children.Add(control);
            }
        }
        public static ControlTemplate GetDefaultTemplate(DependencyObject obj)
        {
            return (ControlTemplate)obj.GetValue(DefaultTemplateProperty);
        }
        public static void SetDefaultTemplate(DependencyObject obj, ControlTemplate value)
        {
            obj.SetValue(DefaultTemplateProperty, value);
        }
        public static readonly DependencyProperty DefaultTemplateProperty =
            DependencyProperty.RegisterAttached("DefaultTemplate", typeof(ControlTemplate), typeof(UniformGrid),
                new PropertyMetadata(null, OnDefaultTemplateChanged));
        private static void OnDefaultTemplateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            if (d is UniformGrid grid)
            {
                if (e.Property == DefaultTemplateProperty)
                {
                    var tem = GetDefaultTemplate(grid);
                    if (tem == null) return;
                    //var rowCount = grid.Rows;
                    int columnCount = grid.Columns;
                    int totalCount = grid.Children.Count;
                    int rowCount = totalCount / columnCount;
                    int last = totalCount % columnCount;
                    if (last == 0)
                    {
                        return;
                    }
                    int addCount = columnCount - last;
                    for (int i = 0; i < addCount; i++)
                    {
                        Button u = new Button
                        {
                            Template = tem
                        };
                        grid.Children.Add(u);
                    }
                }
            }
        }
    }