diff --git a/src/Controls/src/Core/Element.cs b/src/Controls/src/Core/Element.cs index f7c8aabcf621..9841d44ee4a2 100644 --- a/src/Controls/src/Core/Element.cs +++ b/src/Controls/src/Core/Element.cs @@ -360,7 +360,7 @@ protected virtual void OnChildRemoved(Element child, int oldLogicalIndex) { child.Parent = null; - ChildRemoved?.Invoke(child, new ElementEventArgs(child)); + ChildRemoved?.Invoke(this, new ElementEventArgs(child)); VisualDiagnostics.OnChildRemoved(this, child, oldLogicalIndex); diff --git a/src/Controls/tests/Core.UnitTests/ElementTests.cs b/src/Controls/tests/Core.UnitTests/ElementTests.cs index 9e499ace56e5..d2b7e6ea3533 100644 --- a/src/Controls/tests/Core.UnitTests/ElementTests.cs +++ b/src/Controls/tests/Core.UnitTests/ElementTests.cs @@ -55,11 +55,13 @@ public void DescendantAddedLevel1() bool added = false; root.DescendantAdded += (sender, args) => { - Assert.Same(args.Element, child); + Assert.Same(root, sender); + Assert.Same(child, args.Element); added = true; }; root.Children.Add(child); + Assert.True(added); } [Fact] @@ -75,11 +77,13 @@ public void DescendantAddedLevel2() bool added = false; root.DescendantAdded += (sender, args) => { - Assert.Same(args.Element, child2); + Assert.Same(root, sender); + Assert.Same(child2, args.Element); added = true; }; child.Children.Add(child2); + Assert.True(added); } [Fact] @@ -100,6 +104,8 @@ public void DescendantAddedExistingChildren() bool tier2added = false; root.DescendantAdded += (sender, args) => { + Assert.Same(root, sender); + if (!tier1added) tier1added = ReferenceEquals(child, args.Element); if (!tier2added) @@ -123,11 +129,13 @@ public void DescendantRemovedLevel1() bool removed = false; root.DescendantRemoved += (sender, args) => { - Assert.Same(args.Element, child); + Assert.Same(root, sender); + Assert.Same(child, args.Element); removed = true; }; root.Children.Remove(child); + Assert.True(removed); } [Fact] @@ -144,11 +152,13 @@ public void DescendantRemovedLevel2() bool removed = false; root.DescendantRemoved += (sender, args) => { - Assert.Same(args.Element, child2); + Assert.Same(root, sender); + Assert.Same(child2, args.Element); removed = true; }; child.Children.Remove(child2); + Assert.True(removed); } [Fact] @@ -171,6 +181,8 @@ public void DescendantRemovedWithChildren() bool tier2removed = false; root.DescendantRemoved += (sender, args) => { + Assert.Same(root, sender); + if (!tier1removed) tier1removed = ReferenceEquals(child, args.Element); if (!tier2removed) @@ -182,5 +194,44 @@ public void DescendantRemovedWithChildren() Assert.True(tier1removed); Assert.True(tier2removed); } + + [Fact] + public void ChildAdded() + { + var root = new TestElement(); + + var child = new TestElement(); + + bool added = false; + root.ChildAdded += (sender, args) => + { + Assert.Same(root, sender); + Assert.Same(child, args.Element); + added = true; + }; + + root.Children.Add(child); + Assert.True(added); + } + + [Fact] + public void ChildRemoved() + { + var root = new TestElement(); + + var child = new TestElement(); + root.Children.Add(child); + + bool removed = false; + root.ChildRemoved += (sender, args) => + { + Assert.Same(root, sender); + Assert.Same(child, args.Element); + removed = true; + }; + + root.Children.Remove(child); + Assert.True(removed); + } } }