private void ArrangeNodeHorizontally(RPNode node, Size finalSize) { if (node == null) { return; } if (!node.IsArrangedHorizontally()) { // We must resolve dependencies first. ArrangeNodeHorizontally(node.m_leftOfNode, finalSize); ArrangeNodeHorizontally(node.m_aboveNode, finalSize); ArrangeNodeHorizontally(node.m_rightOfNode, finalSize); ArrangeNodeHorizontally(node.m_belowNode, finalSize); ArrangeNodeHorizontally(node.m_alignLeftWithNode, finalSize); ArrangeNodeHorizontally(node.m_alignTopWithNode, finalSize); ArrangeNodeHorizontally(node.m_alignRightWithNode, finalSize); ArrangeNodeHorizontally(node.m_alignBottomWithNode, finalSize); ArrangeNodeHorizontally(node.m_alignHorizontalCenterWithNode, finalSize); ArrangeNodeHorizontally(node.m_alignVerticalCenterWithNode, finalSize); double nodeMeasureRectX, nodeMeasureRectWidth; CalculateMeasureRectHorizontally(node, finalSize, out nodeMeasureRectX, out nodeMeasureRectWidth); node.m_measureRect.X = nodeMeasureRectX; node.m_measureRect.Width = nodeMeasureRectWidth; double nodeArrangeRectX, nodeArrangeRectWidth; CalculateArrangeRectHorizontally(node, out nodeArrangeRectX, out nodeArrangeRectWidth); node.m_arrangeRect.X = nodeArrangeRectX; node.m_arrangeRect.Width = nodeArrangeRectWidth; node.SetArrangedHorizontally(true); } }