创建自定义面板

这个例子展示了如何覆盖默认的 Panel 元素布局行为,创建从 Panel 派生的自定义布局元素。

该示例定义了一个简单的自定义 Panel 元素叫做 PlotPanel,它根据两个硬编码的 x 和 y 坐标来定位子元素。在这个示例中,xy 都设置为 50,因此所有子元素都在 x 和 y 轴上的该位置上定位。

为了实现自定义的 Panel 行为,该示例使用了 MeasureOverrideArrangeOverride 方法。每个方法返回必要的 Size 数据,以便定位和渲染子元素。

public class PlotPanel : Panel
{
    // 覆盖 Panel 的默认 Measure 方法
    protected override Size MeasureOverride(Size availableSize)
    {
        var panelDesiredSize = new Size();

        // 在我们的例子中,我们只有一个子元素。
        // 报告我们的面板只需要其唯一子元素的大小。
        foreach (var child in Children)
        {
            child.Measure(availableSize);
            panelDesiredSize = child.DesiredSize;
        }

        return panelDesiredSize;
    }

    protected override Size ArrangeOverride(Size finalSize)
    {
        foreach (var child in Children)
        {
            double x = 50;
            double y = 50;

            child.Arrange(new Rect(new Point(x, y), child.DesiredSize));
        }
        
        return finalSize; // 返回最终排列的大小
    }
}

Last updated