diff --git a/src/Perspex.Controls/Canvas.cs b/src/Perspex.Controls/Canvas.cs index 2277816358..76f0d904cc 100644 --- a/src/Perspex.Controls/Canvas.cs +++ b/src/Perspex.Controls/Canvas.cs @@ -3,6 +3,7 @@ using System; using Perspex.Input; +using Perspex.Layout; namespace Perspex.Controls { @@ -46,7 +47,7 @@ namespace Perspex.Controls /// static Canvas() { - AffectsArrange(LeftProperty, TopProperty, RightProperty, BottomProperty); + AffectsCanvasArrange(LeftProperty, TopProperty, RightProperty, BottomProperty); } /// @@ -204,5 +205,29 @@ namespace Perspex.Controls return finalSize; } + + /// + /// Marks a property on a child as affecting the canvas' arrangement. + /// + /// The properties. + private static void AffectsCanvasArrange(params PerspexProperty[] properties) + { + foreach (var property in properties) + { + property.Changed.Subscribe(AffectsCanvasArrangeInvalidate); + } + } + + /// + /// Calls on the parent of the control whose + /// property changed, if that parent is a canvas. + /// + /// The event args. + private static void AffectsCanvasArrangeInvalidate(PerspexPropertyChangedEventArgs e) + { + var control = e.Sender as IControl; + var canvas = control?.Parent as Canvas; + canvas?.InvalidateArrange(); + } } }