I have written a custom comparer that uses the incoming port id. This prevents links from crossing each other. There are cases when the comparer event is not firing.
The code is as follows:
<go:Diagram.Layout >
<go:TreeLayout TreeStyle=“LastParents”
Arrangement=“FixedRoots”
NodeSpacing=“50”
AlternateNodeSpacing=“50”
Sorting=“Ascending”
Angle=“0”
SetsPortSpot=“False”
Comparer="{StaticResource theFromPortComparer}"
AlternateComparer="{StaticResource theFromPortComparer}" />
</go:Diagram.Layout>
public class FromPortComparer : IComparer
{
public int Compare(TreeVertex x, TreeVertex y)
{
if (x.Node.NodesInto.Count() > 0 && y.Node.NodesInto.Count() > 0)
{
List xNodesInto = x.Node.NodesInto.ToList();
List yNodesInto = y.Node.NodesInto.ToList();
if (xNodesInto[0] == yNodesInto[0])
{
List xLinksInto = x.Node.LinksInto.ToList();
List yLinksInto = y.Node.LinksInto.ToList();
int xLink = int.Parse(xLinksInto[0].FromPortId);
int yLink = int.Parse(yLinksInto[0].FromPortId);
return xLink.CompareTo(yLink);
}
}
return 1;
}
}