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();
}
}
}