Без ковыряния код - сложно сказать. Для обсчета расположения отдельных элементов вроде как есть интерфейс IHVLayoutEngine, ссылка на который является одним из свойств TreeViewModel. Если по-своему реализовать этот интерфейс либо доработать его штатную реализацию, класс HVLayoutEngine, то, вероятно, можно как-то поменять "амфитеатр" на что-либо другое. В целом, если вооружиться Reflector'ом, можно посмотреть на штатную реализацию и сваять что-то по аналогии.
PHP код:
public interface IHVLayoutEngine
{
// Methods
void CalculateConnectionPointsForNodes(ObservableCollection<LevelForNodeViewModels> children);
Point CalculatePositionForParent(int parentRingNumber, Point previousNodePos, Point firstChild, Point lastChild);
Point CalculatePositionLeftSiblingParent(Point parent);
double GetHeightForEllipse(int ringnumber);
double GetRadiusInRings(int ringNumber);
double GetWidthForEllipse(int ringnumber);
Dictionary<int, int> HowManyNodeToFit();
Collection<Point> LeftAlignNodes(int ringNumber);
void SetData(double nHeight, double nWidth, Dictionary<int, double> radius, double angle, double dd, Point cn_position, Dictionary<int, double> widthFE, Dictionary<int, double> heightFE);
void SetDataForEllipses(Dictionary<int, double> widhtFE, Dictionary<int, double> heightFE);
void SetRadiusInRings(Dictionary<int, double> radius);
}