diff --git a/src/Perspex.Layout/ILayoutManager.cs b/src/Perspex.Layout/ILayoutManager.cs index e32701bfec..7badab1cbf 100644 --- a/src/Perspex.Layout/ILayoutManager.cs +++ b/src/Perspex.Layout/ILayoutManager.cs @@ -53,14 +53,12 @@ namespace Perspex.Layout /// Notifies the layout manager that a control requires a measure. /// /// The control. - /// The control's distance from the layout root. - void InvalidateMeasure(ILayoutable control, int distance); + void InvalidateMeasure(ILayoutable control); /// /// Notifies the layout manager that a control requires an arrange. /// /// The control. - /// The control's distance from the layout root. - void InvalidateArrange(ILayoutable control, int distance); + void InvalidateArrange(ILayoutable control); } } diff --git a/src/Perspex.Layout/LayoutManager.cs b/src/Perspex.Layout/LayoutManager.cs index 7d27314cb9..d425e5b7ef 100644 --- a/src/Perspex.Layout/LayoutManager.cs +++ b/src/Perspex.Layout/LayoutManager.cs @@ -77,8 +77,7 @@ namespace Perspex.Layout /// Notifies the layout manager that a control requires a measure. /// /// The control. - /// The control's distance from the layout root. - public void InvalidateMeasure(ILayoutable control, int distance) + public void InvalidateMeasure(ILayoutable control) { Contract.Requires(control != null); Dispatcher.UIThread.VerifyAccess(); @@ -92,8 +91,7 @@ namespace Perspex.Layout /// Notifies the layout manager that a control requires an arrange. /// /// The control. - /// The control's distance from the layout root. - public void InvalidateArrange(ILayoutable control, int distance) + public void InvalidateArrange(ILayoutable control) { Contract.Requires(control != null); Dispatcher.UIThread.VerifyAccess(); diff --git a/src/Perspex.Layout/Layoutable.cs b/src/Perspex.Layout/Layoutable.cs index 850a5bb3bd..a1ae8f5d56 100644 --- a/src/Perspex.Layout/Layoutable.cs +++ b/src/Perspex.Layout/Layoutable.cs @@ -396,7 +396,7 @@ namespace Perspex.Layout IsArrangeValid = false; var root = GetLayoutRoot(); - root?.Item1.LayoutManager?.InvalidateMeasure(this, root.Item2); + root?.LayoutManager?.InvalidateMeasure(this); } } @@ -412,7 +412,7 @@ namespace Perspex.Layout IsArrangeValid = false; var root = GetLayoutRoot(); - root?.Item1.LayoutManager?.InvalidateArrange(this, root.Item2); + root?.LayoutManager?.InvalidateArrange(this); } } @@ -675,23 +675,13 @@ namespace Perspex.Layout } /// - /// Gets the layout root, together with its distance. + /// Gets the layout root. /// - /// - /// A tuple containing the layout root and the root's distance from this control. - /// - private Tuple GetLayoutRoot() + private ILayoutRoot GetLayoutRoot() { - var control = (IVisual)this; - var distance = 0; - - while (control != null && !(control is ILayoutRoot)) - { - control = control.GetVisualParent(); - ++distance; - } - - return control != null ? Tuple.Create((ILayoutRoot)control, distance) : null; + return this.GetSelfAndVisualAncestors() + .OfType() + .FirstOrDefault(); } } }