From 9bf39b5d4c8474e51db29c31547d8c3e7a680cd4 Mon Sep 17 00:00:00 2001 From: Yoshi Askharoun Date: Thu, 16 May 2024 16:19:38 -0500 Subject: [PATCH] Crude method for dialog close animation --- ZuneModdingHelper/AppWindow.xaml | 7 ++++++- ZuneModdingHelper/AppWindow.xaml.cs | 24 ++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/ZuneModdingHelper/AppWindow.xaml b/ZuneModdingHelper/AppWindow.xaml index 32eae82..604f552 100644 --- a/ZuneModdingHelper/AppWindow.xaml +++ b/ZuneModdingHelper/AppWindow.xaml @@ -29,6 +29,11 @@ + + + + @@ -120,7 +125,7 @@ - + diff --git a/ZuneModdingHelper/AppWindow.xaml.cs b/ZuneModdingHelper/AppWindow.xaml.cs index 7d7b877..720b70d 100644 --- a/ZuneModdingHelper/AppWindow.xaml.cs +++ b/ZuneModdingHelper/AppWindow.xaml.cs @@ -5,6 +5,7 @@ using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Interop; +using System.Windows.Media.Animation; using ZuneModdingHelper.Controls; using ZuneModdingHelper.Messages; using ZuneModdingHelper.Pages; @@ -18,14 +19,18 @@ namespace ZuneModdingHelper { private IntPtr _windowHandle; private int _selectedPivotIdx = -1; + private int _lastClosedDialog = 0; private readonly Type[] _pages = [typeof(ModsPage), typeof(SettingsPage), typeof(AboutPage)]; + private readonly Storyboard _dialogExitAnimation; public AppWindow() { InitializeComponent(); Pivot.Loaded += Pivot_Loaded; + _dialogExitAnimation = (Storyboard)Resources["DialogExitAnimation"]; + WeakReferenceMessenger.Default.Register(this); WeakReferenceMessenger.Default.Register(this); } @@ -92,12 +97,27 @@ namespace ZuneModdingHelper { ViewModel = message.ViewModel }; - DialogPresenter.Visibility = Visibility.Visible; + + DialogPresenter.IsHitTestVisible = true; } void IRecipient.Receive(CloseDialogMessage message) { - DialogPresenter.Visibility = Visibility.Collapsed; + DialogPresenter.IsHitTestVisible = false; + + _dialogExitAnimation.Completed += DialogExitAnimation_Completed; + + _lastClosedDialog = DialogPresenter.Content.GetHashCode(); + (DialogPresenter.Content as FrameworkElement)?.BeginStoryboard(_dialogExitAnimation); + } + + private void DialogExitAnimation_Completed(object sender, EventArgs e) + { + _dialogExitAnimation.Completed -= DialogExitAnimation_Completed; + + if (_lastClosedDialog != DialogPresenter.Content?.GetHashCode()) + return; + DialogPresenter.Content = null; } }