You need to override TreeLayout.ArrangeTrees.
Rather than try to explain how you should do it, here’s the definition, so you can see how the normal TreeArrangement choices are implemented:
[code] protected virtual void ArrangeTrees() {
if (this.Arrangement == TreeArrangement.FixedRoots) {
foreach (Node r in this.Roots) {
TreeVertex root = this.Network.FindVertex®;
Rect b = r.Bounds;
if (Double.IsNaN(b.X) || Double.IsInfinity(b.X)) b.X = 0;
if (Double.IsNaN(b.Y) || Double.IsInfinity(b.Y)) b.Y = 0;
AssignAbsolutePositions(root, new Point(b.X, b.Y));
}
} else {
Point p = this.ArrangementOrigin;
foreach (Node r in this.Roots) {
TreeVertex root = this.Network.FindVertex®;
if (root == null) continue;
Point q = p;
q.X += root.SubtreeOffset.X;
q.Y += root.SubtreeOffset.Y;
AssignAbsolutePositions(root, q);
switch (this.Arrangement) {
case TreeArrangement.Vertical:
p.Y += root.SubtreeSize.Height + this.ArrangementSpacing.Height;
break;
case TreeArrangement.Horizontal:
p.X += root.SubtreeSize.Width + this.ArrangementSpacing.Width;
break;
default:
throw new InvalidOperationException("Unhandled Arrangement value " + this.Arrangement.ToString());
}
}
}
}
internal void AssignAbsolutePositions(TreeVertex v, Point p) {
if (v == null) return;
v.Position = p;
foreach (TreeVertex c in v.Children) {
AssignAbsolutePositions(c, new Point(p.X + c.RelativePosition.X, p.Y + c.RelativePosition.Y));
}
}[/code]
I do recommend upgrading to version 1.3.*. We should be coming out with another baselevel (1.3.6) shortly.