diff --git a/src/Perspex.SceneGraph/Visual.cs b/src/Perspex.SceneGraph/Visual.cs index 66f92aa920..160212355f 100644 --- a/src/Perspex.SceneGraph/Visual.cs +++ b/src/Perspex.SceneGraph/Visual.cs @@ -285,17 +285,8 @@ namespace Perspex /// Called when the control is added to a visual tree. /// /// The event args. - /// - /// It is vital that if you override this method you call the base implementation; - /// failing to do so will cause numerous features to not work as expected. - /// protected virtual void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) { - if (RenderTransform != null) - { - RenderTransform.Changed += RenderTransformChanged; - } - AttachedToVisualTree?.Invoke(this, e); } @@ -303,17 +294,8 @@ namespace Perspex /// Called when the control is removed from a visual tree. /// /// The event args. - /// - /// It is vital that if you override this method you call the base implementation; - /// failing to do so will cause numerous features to not work as expected. - /// protected virtual void OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs e) { - if (RenderTransform != null) - { - RenderTransform.Changed -= RenderTransformChanged; - } - DetachedFromVisualTree?.Invoke(this, e); } @@ -417,14 +399,14 @@ namespace Perspex if (VisualRoot != null) { var e = new VisualTreeAttachmentEventArgs(VisualRoot); - NotifyDetachedFromVisualTree(e); + OnDetachedFromVisualTreeCore(e); } if (_visualParent is IRenderRoot || _visualParent?.IsAttachedToVisualTree == true) { var root = this.GetVisualAncestors().OfType().FirstOrDefault(); var e = new VisualTreeAttachmentEventArgs(root); - NotifyAttachedToVisualTree(e); + OnAttachedToVisualTreeCore(e); } RaisePropertyChanged(VisualParentProperty, old, value, BindingPriority.LocalValue); @@ -462,18 +444,24 @@ namespace Perspex /// for this control and all of its visual descendents. /// /// The event args. - private void NotifyAttachedToVisualTree(VisualTreeAttachmentEventArgs e) + private void OnAttachedToVisualTreeCore(VisualTreeAttachmentEventArgs e) { Logger.Verbose(LogArea.Visual, this, "Attached to visual tree"); VisualRoot = e.Root; + + if (RenderTransform != null) + { + RenderTransform.Changed += RenderTransformChanged; + } + OnAttachedToVisualTree(e); if (VisualChildren != null) { foreach (Visual child in VisualChildren.OfType()) { - child.NotifyAttachedToVisualTree(e); + child.OnAttachedToVisualTreeCore(e); } } } @@ -483,18 +471,24 @@ namespace Perspex /// for this control and all of its visual descendents. /// /// The event args. - private void NotifyDetachedFromVisualTree(VisualTreeAttachmentEventArgs e) + private void OnDetachedFromVisualTreeCore(VisualTreeAttachmentEventArgs e) { Logger.Verbose(LogArea.Visual, this, "Detached from visual tree"); VisualRoot = null; + + if (RenderTransform != null) + { + RenderTransform.Changed -= RenderTransformChanged; + } + OnDetachedFromVisualTree(e); if (VisualChildren != null) { foreach (Visual child in VisualChildren.OfType()) { - child.NotifyDetachedFromVisualTree(e); + child.OnDetachedFromVisualTreeCore(e); } } }