From fd46a449880a50bac1b52b846e8be53b361a61ae Mon Sep 17 00:00:00 2001 From: Daniel Clark Date: Thu, 11 Feb 2021 10:44:07 +0000 Subject: [PATCH] Added API for closing FlyoutApplication from the Flyout control in two seperate projects. --- .../NotificationFlyoutSample.sln | 22 ++++++++++++++++ .../NotificationFlyoutSample.csproj | 4 +++ .../NotificationFlyoutSample/Shell.xaml | 1 + .../NotificationFlyoutSample/Shell.xaml.cs | 6 +++++ .../NotificationFlyout.Uwp.UI.Controls.csproj | 5 ++++ .../NotificationFlyout/NotificationFlyout.cs | 18 +++++++++++-- .../INotificationFlyoutApplication.cs | 7 ++++++ ...tionFlyout - Backup.Wpf.UI.Controls.csproj | 25 ------------------- .../NotificationFlyoutApplication.cs | 23 ++++++++++++++--- .../NotificationFlyoutXamlHost.cs | 5 ++++ 10 files changed, 85 insertions(+), 31 deletions(-) create mode 100644 src/NotificationFlyout.Uwp.UI/INotificationFlyoutApplication.cs delete mode 100644 src/NotificationFlyout.Wpf.UI.Controls/NotificationFlyout - Backup.Wpf.UI.Controls.csproj diff --git a/samples/NotificationFlyoutSample/NotificationFlyoutSample.sln b/samples/NotificationFlyoutSample/NotificationFlyoutSample.sln index cf09d7a..0e9767e 100644 --- a/samples/NotificationFlyoutSample/NotificationFlyoutSample.sln +++ b/samples/NotificationFlyoutSample/NotificationFlyoutSample.sln @@ -18,6 +18,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotificationFlyout.Wpf.UI", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotificationFlyout.Wpf.UI.Controls", "..\..\src\NotificationFlyout.Wpf.UI.Controls\NotificationFlyout.Wpf.UI.Controls.csproj", "{094A2030-C430-490B-AB26-205385A0D4BF}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotificationFlyout.Uwp.UI", "..\..\src\NotificationFlyout.Uwp.UI\NotificationFlyout.Uwp.UI.csproj", "{ADE190A2-F751-4836-B8F4-BF56694A4B3F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -139,6 +141,26 @@ Global {094A2030-C430-490B-AB26-205385A0D4BF}.Release|x64.Build.0 = Release|x64 {094A2030-C430-490B-AB26-205385A0D4BF}.Release|x86.ActiveCfg = Release|Any CPU {094A2030-C430-490B-AB26-205385A0D4BF}.Release|x86.Build.0 = Release|Any CPU + {ADE190A2-F751-4836-B8F4-BF56694A4B3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ADE190A2-F751-4836-B8F4-BF56694A4B3F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ADE190A2-F751-4836-B8F4-BF56694A4B3F}.Debug|ARM.ActiveCfg = Debug|Any CPU + {ADE190A2-F751-4836-B8F4-BF56694A4B3F}.Debug|ARM.Build.0 = Debug|Any CPU + {ADE190A2-F751-4836-B8F4-BF56694A4B3F}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {ADE190A2-F751-4836-B8F4-BF56694A4B3F}.Debug|ARM64.Build.0 = Debug|Any CPU + {ADE190A2-F751-4836-B8F4-BF56694A4B3F}.Debug|x64.ActiveCfg = Debug|x64 + {ADE190A2-F751-4836-B8F4-BF56694A4B3F}.Debug|x64.Build.0 = Debug|x64 + {ADE190A2-F751-4836-B8F4-BF56694A4B3F}.Debug|x86.ActiveCfg = Debug|Any CPU + {ADE190A2-F751-4836-B8F4-BF56694A4B3F}.Debug|x86.Build.0 = Debug|Any CPU + {ADE190A2-F751-4836-B8F4-BF56694A4B3F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ADE190A2-F751-4836-B8F4-BF56694A4B3F}.Release|Any CPU.Build.0 = Release|Any CPU + {ADE190A2-F751-4836-B8F4-BF56694A4B3F}.Release|ARM.ActiveCfg = Release|Any CPU + {ADE190A2-F751-4836-B8F4-BF56694A4B3F}.Release|ARM.Build.0 = Release|Any CPU + {ADE190A2-F751-4836-B8F4-BF56694A4B3F}.Release|ARM64.ActiveCfg = Release|Any CPU + {ADE190A2-F751-4836-B8F4-BF56694A4B3F}.Release|ARM64.Build.0 = Release|Any CPU + {ADE190A2-F751-4836-B8F4-BF56694A4B3F}.Release|x64.ActiveCfg = Release|x64 + {ADE190A2-F751-4836-B8F4-BF56694A4B3F}.Release|x64.Build.0 = Release|x64 + {ADE190A2-F751-4836-B8F4-BF56694A4B3F}.Release|x86.ActiveCfg = Release|Any CPU + {ADE190A2-F751-4836-B8F4-BF56694A4B3F}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/samples/NotificationFlyoutSample/NotificationFlyoutSample/NotificationFlyoutSample.csproj b/samples/NotificationFlyoutSample/NotificationFlyoutSample/NotificationFlyoutSample.csproj index 8d12e4a..bc8fa01 100644 --- a/samples/NotificationFlyoutSample/NotificationFlyoutSample/NotificationFlyoutSample.csproj +++ b/samples/NotificationFlyoutSample/NotificationFlyoutSample/NotificationFlyoutSample.csproj @@ -169,6 +169,10 @@ {95f851e4-87a5-4bb7-953e-c0fe3b306f0e} NotificationFlyout.Uwp.UI.Controls + + {ade190a2-f751-4836-b8f4-bf56694a4b3f} + NotificationFlyout.Uwp.UI + 14.0 diff --git a/samples/NotificationFlyoutSample/NotificationFlyoutSample/Shell.xaml b/samples/NotificationFlyoutSample/NotificationFlyoutSample/Shell.xaml index 528c697..15d425e 100644 --- a/samples/NotificationFlyoutSample/NotificationFlyoutSample/Shell.xaml +++ b/samples/NotificationFlyoutSample/NotificationFlyoutSample/Shell.xaml @@ -8,6 +8,7 @@ LightIconSource="/Assets/Icon-Light.ico"> + Designer MSBuild:Compile + + + + + \ No newline at end of file diff --git a/src/NotificationFlyout.Uwp.UI.Controls/NotificationFlyout/NotificationFlyout.cs b/src/NotificationFlyout.Uwp.UI.Controls/NotificationFlyout/NotificationFlyout.cs index 3ef6557..b81f8a0 100644 --- a/src/NotificationFlyout.Uwp.UI.Controls/NotificationFlyout/NotificationFlyout.cs +++ b/src/NotificationFlyout.Uwp.UI.Controls/NotificationFlyout/NotificationFlyout.cs @@ -28,8 +28,10 @@ namespace NotificationFlyout.Uwp.UI.Controls typeof(ElementTheme), typeof(NotificationFlyout), new PropertyMetadata(ElementTheme.Default, OnRequestedThemePropertyChanged)); + public static INotificationFlyoutApplication _applicationInstance; + public static DependencyProperty ContentProperty = - DependencyProperty.Register(nameof(Content), + DependencyProperty.Register(nameof(Content), typeof(UIElement), typeof(NotificationFlyout), new PropertyMetadata(null, OnContentPropertyChanged)); @@ -37,7 +39,6 @@ namespace NotificationFlyout.Uwp.UI.Controls DependencyProperty.Register(nameof(ContextMenuItems), typeof(IList), typeof(NotificationFlyout), new PropertyMetadata(null)); - public NotificationFlyout() { ContextMenuItems = new ObservableCollection(); @@ -45,8 +46,11 @@ namespace NotificationFlyout.Uwp.UI.Controls } internal event EventHandler ContentChanged; + internal event EventHandler IconSourceChanged; + internal event EventHandler MenuItemsChanged; + internal event EventHandler RequestedThemeChanged; public UIElement Content @@ -79,6 +83,16 @@ namespace NotificationFlyout.Uwp.UI.Controls set => SetValue(RequestedThemeProperty, value); } + public static INotificationFlyoutApplication GetApplication() + { + return _applicationInstance; + } + + internal static void SetApplication(INotificationFlyoutApplication application) + { + _applicationInstance = application; + } + private static void OnContentPropertyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs args) { var sender = dependencyObject as NotificationFlyout; diff --git a/src/NotificationFlyout.Uwp.UI/INotificationFlyoutApplication.cs b/src/NotificationFlyout.Uwp.UI/INotificationFlyoutApplication.cs new file mode 100644 index 0000000..f09bd81 --- /dev/null +++ b/src/NotificationFlyout.Uwp.UI/INotificationFlyoutApplication.cs @@ -0,0 +1,7 @@ +namespace NotificationFlyout.Uwp.UI +{ + public interface INotificationFlyoutApplication + { + void Exit(); + } +} diff --git a/src/NotificationFlyout.Wpf.UI.Controls/NotificationFlyout - Backup.Wpf.UI.Controls.csproj b/src/NotificationFlyout.Wpf.UI.Controls/NotificationFlyout - Backup.Wpf.UI.Controls.csproj deleted file mode 100644 index 607c21f..0000000 --- a/src/NotificationFlyout.Wpf.UI.Controls/NotificationFlyout - Backup.Wpf.UI.Controls.csproj +++ /dev/null @@ -1,25 +0,0 @@ - - - - netcoreapp3.1 - true - uap10.0.19041 - AnyCPU;x64 - NU1702 - - - - - - - - - - - - - - - - - diff --git a/src/NotificationFlyout.Wpf.UI.Controls/NotificationFlyout/NotificationFlyoutApplication.cs b/src/NotificationFlyout.Wpf.UI.Controls/NotificationFlyout/NotificationFlyoutApplication.cs index 4e192df..18ddd84 100644 --- a/src/NotificationFlyout.Wpf.UI.Controls/NotificationFlyout/NotificationFlyoutApplication.cs +++ b/src/NotificationFlyout.Wpf.UI.Controls/NotificationFlyout/NotificationFlyoutApplication.cs @@ -1,21 +1,26 @@ -using System; +using NotificationFlyout.Uwp.UI; +using System; using System.Windows; using System.Windows.Markup; namespace NotificationFlyout.Wpf.UI.Controls { [ContentProperty(nameof(Flyout))] - public class NotificationFlyoutApplication : DependencyObject + public class NotificationFlyoutApplication : DependencyObject, INotificationFlyoutApplication { public static DependencyProperty FlyoutProperty = DependencyProperty.Register(nameof(Flyout), typeof(Uwp.UI.Controls.NotificationFlyout), typeof(NotificationFlyoutApplication), new PropertyMetadata(null, OnFlyoutPropertyChanged)); + private static NotificationFlyoutApplication _instance; private readonly ContextMenuXamlHost _contextMenuXamlHost; private readonly NotificationFlyoutXamlHost _notificationFlyoutXamlHost; + public NotificationFlyoutApplication() { + _instance = this; + _notificationFlyoutXamlHost = new NotificationFlyoutXamlHost(); _notificationFlyoutXamlHost.ContextMenuRequested += OnContextMenuRequested; _notificationFlyoutXamlHost.Show(); @@ -24,12 +29,20 @@ namespace NotificationFlyout.Wpf.UI.Controls _contextMenuXamlHost.Show(); } + public static INotificationFlyoutApplication Current => _instance; + public Uwp.UI.Controls.NotificationFlyout Flyout { get => (Uwp.UI.Controls.NotificationFlyout)GetValue(FlyoutProperty); set => SetValue(FlyoutProperty, value); } + public void Exit() + { + _contextMenuXamlHost.Close(); + _notificationFlyoutXamlHost.Close(); + } + public void HideFlyout() { _notificationFlyoutXamlHost.HideFlyout(); @@ -53,8 +66,10 @@ namespace NotificationFlyout.Wpf.UI.Controls private void OnFlyoutPropertyChanged() { - _notificationFlyoutXamlHost.SetFlyout(Flyout); - _contextMenuXamlHost.SetFlyout(Flyout); + _notificationFlyoutXamlHost?.SetFlyout(Flyout); + _contextMenuXamlHost?.SetFlyout(Flyout); + + Uwp.UI.Controls.NotificationFlyout.SetApplication(this); } } } \ No newline at end of file diff --git a/src/NotificationFlyout.Wpf.UI.Controls/NotificationFlyout/NotificationFlyoutXamlHost.cs b/src/NotificationFlyout.Wpf.UI.Controls/NotificationFlyout/NotificationFlyoutXamlHost.cs index 2e26307..b1aeecf 100644 --- a/src/NotificationFlyout.Wpf.UI.Controls/NotificationFlyout/NotificationFlyoutXamlHost.cs +++ b/src/NotificationFlyout.Wpf.UI.Controls/NotificationFlyout/NotificationFlyoutXamlHost.cs @@ -136,6 +136,11 @@ namespace NotificationFlyout.Wpf.UI.Controls _taskbarHelper.TaskbarChanged += OnTaskbarChanged; } + protected override void OnClosed(EventArgs args) + { + _notificationIconHelper.Dispose(); + } + private void UpdateFlyoutContent() { if (_flyout == null) return;