From 357d2ba7efd94707f198067f3c69ba61f2f843c9 Mon Sep 17 00:00:00 2001 From: Darren Batchelor Date: Thu, 19 Aug 2021 09:50:27 -0700 Subject: [PATCH 01/24] Wire up Unload event --- .../FrameworkElementExtensions.RelativeAncestor.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Microsoft.Toolkit.Uwp.UI/Extensions/FrameworkElement/FrameworkElementExtensions.RelativeAncestor.cs b/Microsoft.Toolkit.Uwp.UI/Extensions/FrameworkElement/FrameworkElementExtensions.RelativeAncestor.cs index 8dbdf9dd251..2dc95954d67 100644 --- a/Microsoft.Toolkit.Uwp.UI/Extensions/FrameworkElement/FrameworkElementExtensions.RelativeAncestor.cs +++ b/Microsoft.Toolkit.Uwp.UI/Extensions/FrameworkElement/FrameworkElementExtensions.RelativeAncestor.cs @@ -64,10 +64,13 @@ private static void AncestorType_PropertyChanged(DependencyObject obj, Dependenc if (obj is FrameworkElement fe) { fe.Loaded -= FrameworkElement_Loaded; + fe.Unloaded -= FrameworkElement_Unloaded; if (args.NewValue != null) { fe.Loaded += FrameworkElement_Loaded; + fe.Unloaded += FrameworkElement_Unloaded; + if (fe.Parent != null) { FrameworkElement_Loaded(fe, null); @@ -83,5 +86,13 @@ private static void FrameworkElement_Loaded(object sender, RoutedEventArgs e) SetAncestor(fe, fe.FindAscendant(GetAncestorType(fe))); } } + + private static void FrameworkElement_Unloaded(object sender, RoutedEventArgs e) + { + if(sender is FrameworkElement fe) + { + SetAncestor(fe, null); + } + } } } \ No newline at end of file From d529d4850916141bcd694bc83186193585b5dd09 Mon Sep 17 00:00:00 2001 From: Darren Batchelor Date: Mon, 23 Aug 2021 10:18:42 -0700 Subject: [PATCH 02/24] Added FrameworkElementExtension test --- .../Test_FrameworkElementExtensions.cs | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 UnitTests/UnitTests.UWP/Extensions/Test_FrameworkElementExtensions.cs diff --git a/UnitTests/UnitTests.UWP/Extensions/Test_FrameworkElementExtensions.cs b/UnitTests/UnitTests.UWP/Extensions/Test_FrameworkElementExtensions.cs new file mode 100644 index 00000000000..52eadeb27c1 --- /dev/null +++ b/UnitTests/UnitTests.UWP/Extensions/Test_FrameworkElementExtensions.cs @@ -0,0 +1,48 @@ +using Microsoft.Toolkit.Uwp; +using Microsoft.Toolkit.Uwp.UI; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System.Threading.Tasks; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Markup; + +namespace UnitTests.Extensions +{ + public class Test_FrameworkElementExtensions : VisualUITestBase + { + [TestCategory("FrameworkElementExtensions")] + [TestMethod] + public async Task Test_Ancestor_WeakReference() + { + // Need to sim loading the control, and not just load the XAML via XamlReader + var view = App.DispatcherQueue.EnqueueAsync(async () => + { + var treeRoot = XamlReader.Load( + @" + + +