WP7备注(22)(多类型Panel自定义)

单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);
}
原文地址:https://www.cnblogs.com/otomii/p/2032569.html