DockPanel

来源:百度文库 编辑:神马文学网 时间:2024/04/29 10:31:51
protected override Size ArrangeOverride(Size arrangeSize)
{
UIElementCollection internalChildren = base.InternalChildren;
int count = internalChildren.Count;
int num2 = count - (this.LastChildFill ? 1 : 0);
double x = 0.0;
double y = 0.0;
double num5 = 0.0;
double num6 = 0.0;
for (int i = 0; i < count; i++)
{
UIElement element = internalChildren[i];
if (element != null)
{
Size desiredSize = element.DesiredSize;
Rect finalRect = new Rect(x, y, Math.Max((double) 0.0, (double) (arrangeSize.Width - (x + num5))), Math.Max((double) 0.0, (double) (arrangeSize.Height - (y + num6))));
if (i < num2)
{
switch (GetDock(element))
{
case Dock.Left:
x += desiredSize.Width;
finalRect.Width = desiredSize.Width;
break;
case Dock.Top:
y += desiredSize.Height;
finalRect.Height = desiredSize.Height;
break;
case Dock.Right:
num5 += desiredSize.Width;
finalRect.X = Math.Max((double) 0.0, (double) (arrangeSize.Width - num5));
finalRect.Width = desiredSize.Width;
break;
case Dock.Bottom:
num6 += desiredSize.Height;
finalRect.Y = Math.Max((double) 0.0, (double) (arrangeSize.Height - num6));
finalRect.Height = desiredSize.Height;
break;
}
}
element.Arrange(finalRect);
}
}
return arrangeSize;
}
protected override Size MeasureOverride(Size constraint)
{
UIElementCollection internalChildren = base.InternalChildren;
double num = 0.0;
double num2 = 0.0;
double num3 = 0.0;
double num4 = 0.0;
int num5 = 0;
int count = internalChildren.Count;
while (num5 < count)
{
UIElement element = internalChildren[num5];
if (element != null)
{
Size availableSize = new Size(Math.Max((double) 0.0, (double) (constraint.Width - num3)), Math.Max((double) 0.0, (double) (constraint.Height - num4)));
element.Measure(availableSize);
Size desiredSize = element.DesiredSize;
switch (GetDock(element))
{
case Dock.Left:
case Dock.Right:
num2 = Math.Max(num2, num4 + desiredSize.Height);
num3 += desiredSize.Width;
break;
case Dock.Top:
case Dock.Bottom:
num = Math.Max(num, num3 + desiredSize.Width);
num4 += desiredSize.Height;
break;
}
}
num5++;
}
num = Math.Max(num, num3);
return new Size(num, Math.Max(num2, num4));
}