我正在开发一个Panel
与 a 类似的自定义 WPF,Canvas
只是它的子元素的位置表示为百分比而不是绝对偏移量。Panel
我正在调用的PercentageCanvas
将像这样使用:
<Window>
<local:PercentageCanvas>
<ChildElement local:PercentageCanvas.Left=".30" local:PercentageCanvas.Top=".50" />
<ChildElement local:PercentageCanvas.Left="0" local:PercentageCanvas.Top=".9" />
... etc ...
</local:PercentageCanvas>
</Window>
我有PercentageCanvas
工作,虽然不像我预期的那样。PercentageCanvas
正如我所预料的那样,子元素的位置相对于子元素的中心,而不是左上角。这是ArrangeOverride
我使用的给我这种行为的方法:
protected override Size ArrangeOverride(Size finalSize)
{
int currentIndex = 0;
for (int index = InternalChildren.Count - 1; index >= 0; index--)
{
Rect rect = new Rect(finalSize);
rect.Location = new Point()
{
X = finalSize.Width * PercentagePanel.GetLeft(InternalChildren[index]) - finalSize.Width / 2,
Y = finalSize.Height * PercentagePanel.GetTop(InternalChildren[index]) - finalSize.Height / 2
};
InternalChildren[index].Arrange(rect);
currentIndex++;
}
return finalSize;
}
似乎为了抵消这种中心定位行为,我需要知道每个孩子的尺寸并在Location
计算Rect
. 但是,我似乎无法访问孩子的大小来计算适当的偏移量。
在方法中计算子级布局时,如何考虑面板子级的大小ArrangeOverride
?