单Cell的Grid自定义
namespace SingleCellGridDemo { public class SingleCellGrid : Panel { protected override Size MeasureOverride(Size availableSize) { Size compositeSize = new Size(); foreach (UIElement child in Children) { child.Measure(availableSize); compositeSize.Width = Math.Max(compositeSize.Width, child.DesiredSize.Width); compositeSize.Height = Math.Max(compositeSize.Height, child.DesiredSize.Height); } return compositeSize; } protected override Size ArrangeOverride(Size finalSize) { foreach (UIElement child in Children) { child.Arrange(new Rect(new Point(), finalSize)); } return base.ArrangeOverride(finalSize); } } }
Vertical StackPanel自定义:
protected override Size MeasureOverride(Size availableSize) { Size compositeSize = new Size(); foreach (UIElement child in Children) { child.Measure(new Size(availableSize.Width, Double.PositiveInfinity)); compositeSize.Width = Math.Max(compositeSize.Width, child.DesiredSize.Width); compositeSize.Height += child.DesiredSize.Height; } return compositeSize; } protected override Size ArrangeOverride(Size finalSize) { double x = 0, y = 0; foreach (UIElement child in Children) { child.Arrange(new Rect(x, y, finalSize.Width, child.DesiredSize.Height)); y += child.DesiredSize.Height; } return base.ArrangeOverride(finalSize); }