using System; using Avalonia; using Avalonia.Controls; namespace AuroraDesk.Presentation.Controls; /// /// 垂直均匀分布子元素的面板,用于渲染节点左右侧连接点。 /// public class ConnectorColumnPanel : Panel { protected override Size MeasureOverride(Size availableSize) { var maxWidth = 0d; var totalHeight = 0d; foreach (var child in Children) { child.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); var desired = child.DesiredSize; maxWidth = Math.Max(maxWidth, desired.Width); totalHeight += desired.Height; } var height = double.IsInfinity(availableSize.Height) ? totalHeight : availableSize.Height; return new Size(maxWidth, height); } protected override Size ArrangeOverride(Size finalSize) { var count = Children.Count; if (count == 0) { return finalSize; } var totalHeight = 0d; foreach (var child in Children) { totalHeight += child.DesiredSize.Height; } var availableHeight = finalSize.Height; var spacing = count > 0 ? Math.Max(0, (availableHeight - totalHeight) / (count + 1)) : 0; var currentY = spacing; foreach (var child in Children) { var childHeight = child.DesiredSize.Height; var childWidth = Math.Min(child.DesiredSize.Width, finalSize.Width); var x = (finalSize.Width - childWidth) / 2; child.Arrange(new Rect(x, currentY, childWidth, childHeight)); currentY += childHeight + spacing; } return finalSize; } }