WPF: Grid with column/row margin/padding?

前端 未结 15 1118
梦毁少年i
梦毁少年i 2020-12-07 23:57

Is it easily possible to specify a margin and/or padding for rows or columns in a WPF Grid?

I could of course add extra columns to space things out,

15条回答
  •  孤街浪徒
    2020-12-08 00:29

    As was stated before create a GridWithMargins class. Here is my working code example

    public class GridWithMargins : Grid
    {
        public Thickness RowMargin { get; set; } = new Thickness(10, 10, 10, 10);
        protected override Size ArrangeOverride(Size arrangeSize)
        {
            var basesize = base.ArrangeOverride(arrangeSize);
    
            foreach (UIElement child in InternalChildren)
            {
                var pos = GetPosition(child);
                pos.X += RowMargin.Left;
                pos.Y += RowMargin.Top;
    
                var actual = child.RenderSize;
                actual.Width -= (RowMargin.Left + RowMargin.Right);
                actual.Height -= (RowMargin.Top + RowMargin.Bottom);
                var rec = new Rect(pos, actual);
                child.Arrange(rec);
            }
            return arrangeSize;
        }
    
        private Point GetPosition(Visual element)
        {
            var posTransForm = element.TransformToAncestor(this);
            var areaTransForm = posTransForm.Transform(new Point(0, 0));
            return areaTransForm;
        }
    }
    

    Usage:

    
        
            
                
                    
                    
                    
                    
                    
                
                
                    
                    
                    
                
                
                
                
            
        
    
    

提交回复
热议问题