private void ArrangeNodeVertically(RPNode node, Size finalSize) { if (node == null) { return; } if (!node.IsArrangedVertically()) { // We must resolve dependencies first. ArrangeNodeVertically(node.m_leftOfNode, finalSize); ArrangeNodeVertically(node.m_aboveNode, finalSize); ArrangeNodeVertically(node.m_rightOfNode, finalSize); ArrangeNodeVertically(node.m_belowNode, finalSize); ArrangeNodeVertically(node.m_alignLeftWithNode, finalSize); ArrangeNodeVertically(node.m_alignTopWithNode, finalSize); ArrangeNodeVertically(node.m_alignRightWithNode, finalSize); ArrangeNodeVertically(node.m_alignBottomWithNode, finalSize); ArrangeNodeVertically(node.m_alignHorizontalCenterWithNode, finalSize); ArrangeNodeVertically(node.m_alignVerticalCenterWithNode, finalSize); double nodeMeasureRectY, nodeMeasureRectHeight; CalculateMeasureRectVertically(node, finalSize, out nodeMeasureRectY, out nodeMeasureRectHeight); node.m_measureRect.Y = nodeMeasureRectY; node.m_measureRect.Height = nodeMeasureRectHeight; double nodeArrangeRectY, nodeArrangeRectHeight; CalculateArrangeRectVertically(node, out nodeArrangeRectY, out nodeArrangeRectHeight); node.m_arrangeRect.Y = nodeArrangeRectY; node.m_arrangeRect.Height = nodeArrangeRectHeight; node.SetArrangedVertically(true); } }