From 91b4f94e3f441ff85c2a557ca9803e691fd05fb7 Mon Sep 17 00:00:00 2001 From: Daniel Clark Date: Wed, 10 Feb 2021 22:44:19 +0000 Subject: [PATCH] [WIP] Add context menu support --- .../NotificationFlyoutSample.Host.csproj | 1 + samples/NotificationFlyoutSample.sln | 22 +++++ .../NotificationFlyoutSample.Host/Program.cs | 8 +- .../SampleNotificationFlyout.xaml | 9 -- .../SampleNotificationFlyout.xaml.cs | 10 --- .../NotificationFlyoutSample.sln | 2 +- .../Assets/Icon-Light.ico | Bin 0 -> 18686 bytes .../NotificationFlyoutSample/Assets/Icon.ico | Bin 0 -> 18686 bytes .../NotificationFlyoutSample.csproj | 2 + .../NotificationFlyoutSample/Shell.xaml | 83 ++++++++++++++++-- .../NotificationFlyoutSample/Shell.xaml.cs | 39 ++++---- samples/NotificationFlyoutSample/Shell.xaml | 3 + .../NotificationFlyout.Uwp.UI.Controls.csproj | 7 ++ .../ContextMenuFlyoutHost.cs | 34 +++++++ .../ContextMenuFlyoutHost.xaml | 20 +++++ .../NotificationFlyout/NotificationFlyout.cs | 22 ++++- .../NotificationFlyoutHost.cs | 2 +- .../Themes/Generic.xaml | 1 + ...tionFlyout - Backup.Wpf.UI.Controls.csproj | 25 ++++++ .../NotificationFlyoutApplication.cs | 4 +- .../NotificationFlyoutContextMenuXamlHost.cs | 38 ++++++++ .../NotificationFlyoutXamlHost.cs | 75 ++++++---------- .../NotificationFlyout/XamlHostWindow.cs | 60 +++++++++++++ .../Helpers/CursorHelper.cs | 13 +++ .../Helpers/WindowHelper.cs | 4 +- .../NativeMethods.txt | 8 +- .../Properties/AssemblyInfo.cs | 3 + src/NotificationFlyout.Wpf.UI/Screen.cs | 1 + src/NotificationFlyout.sln | 2 +- 29 files changed, 391 insertions(+), 107 deletions(-) delete mode 100644 samples/NotificationFlyoutSample/NotificationFlyoutSample.Host/SampleNotificationFlyout.xaml delete mode 100644 samples/NotificationFlyoutSample/NotificationFlyoutSample.Host/SampleNotificationFlyout.xaml.cs create mode 100644 samples/NotificationFlyoutSample/NotificationFlyoutSample/Assets/Icon-Light.ico create mode 100644 samples/NotificationFlyoutSample/NotificationFlyoutSample/Assets/Icon.ico create mode 100644 src/NotificationFlyout.Uwp.UI.Controls/NotificationFlyout/ContextMenuFlyoutHost.cs create mode 100644 src/NotificationFlyout.Uwp.UI.Controls/NotificationFlyout/ContextMenuFlyoutHost.xaml create mode 100644 src/NotificationFlyout.Wpf.UI.Controls/NotificationFlyout - Backup.Wpf.UI.Controls.csproj create mode 100644 src/NotificationFlyout.Wpf.UI.Controls/NotificationFlyout/NotificationFlyoutContextMenuXamlHost.cs create mode 100644 src/NotificationFlyout.Wpf.UI.Controls/NotificationFlyout/XamlHostWindow.cs create mode 100644 src/NotificationFlyout.Wpf.UI/Helpers/CursorHelper.cs create mode 100644 src/NotificationFlyout.Wpf.UI/Properties/AssemblyInfo.cs diff --git a/samples/NotificationFlyoutSample.Host/NotificationFlyoutSample.Host.csproj b/samples/NotificationFlyoutSample.Host/NotificationFlyoutSample.Host.csproj index ce80946..aeab0b6 100644 --- a/samples/NotificationFlyoutSample.Host/NotificationFlyoutSample.Host.csproj +++ b/samples/NotificationFlyoutSample.Host/NotificationFlyoutSample.Host.csproj @@ -20,6 +20,7 @@ + diff --git a/samples/NotificationFlyoutSample.sln b/samples/NotificationFlyoutSample.sln index 9079ea8..901c113 100644 --- a/samples/NotificationFlyoutSample.sln +++ b/samples/NotificationFlyoutSample.sln @@ -22,6 +22,8 @@ Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "NotificationFlyoutSample.Pa EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotificationFlyout.Uwp.UI", "..\src\NotificationFlyout.Uwp.UI\NotificationFlyout.Uwp.UI.csproj", "{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NotificationFlyout.Shared.UI", "NotificationFlyout.Shared.UI\NotificationFlyout.Shared.UI.csproj", "{6D11191A-6A61-4A93-BEBB-EC34FE9FA403}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -193,6 +195,26 @@ Global {AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Release|x64.Build.0 = Release|x64 {AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Release|x86.ActiveCfg = Release|Any CPU {AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Release|x86.Build.0 = Release|Any CPU + {6D11191A-6A61-4A93-BEBB-EC34FE9FA403}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6D11191A-6A61-4A93-BEBB-EC34FE9FA403}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6D11191A-6A61-4A93-BEBB-EC34FE9FA403}.Debug|ARM.ActiveCfg = Debug|Any CPU + {6D11191A-6A61-4A93-BEBB-EC34FE9FA403}.Debug|ARM.Build.0 = Debug|Any CPU + {6D11191A-6A61-4A93-BEBB-EC34FE9FA403}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {6D11191A-6A61-4A93-BEBB-EC34FE9FA403}.Debug|ARM64.Build.0 = Debug|Any CPU + {6D11191A-6A61-4A93-BEBB-EC34FE9FA403}.Debug|x64.ActiveCfg = Debug|Any CPU + {6D11191A-6A61-4A93-BEBB-EC34FE9FA403}.Debug|x64.Build.0 = Debug|Any CPU + {6D11191A-6A61-4A93-BEBB-EC34FE9FA403}.Debug|x86.ActiveCfg = Debug|Any CPU + {6D11191A-6A61-4A93-BEBB-EC34FE9FA403}.Debug|x86.Build.0 = Debug|Any CPU + {6D11191A-6A61-4A93-BEBB-EC34FE9FA403}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6D11191A-6A61-4A93-BEBB-EC34FE9FA403}.Release|Any CPU.Build.0 = Release|Any CPU + {6D11191A-6A61-4A93-BEBB-EC34FE9FA403}.Release|ARM.ActiveCfg = Release|Any CPU + {6D11191A-6A61-4A93-BEBB-EC34FE9FA403}.Release|ARM.Build.0 = Release|Any CPU + {6D11191A-6A61-4A93-BEBB-EC34FE9FA403}.Release|ARM64.ActiveCfg = Release|Any CPU + {6D11191A-6A61-4A93-BEBB-EC34FE9FA403}.Release|ARM64.Build.0 = Release|Any CPU + {6D11191A-6A61-4A93-BEBB-EC34FE9FA403}.Release|x64.ActiveCfg = Release|Any CPU + {6D11191A-6A61-4A93-BEBB-EC34FE9FA403}.Release|x64.Build.0 = Release|Any CPU + {6D11191A-6A61-4A93-BEBB-EC34FE9FA403}.Release|x86.ActiveCfg = Release|Any CPU + {6D11191A-6A61-4A93-BEBB-EC34FE9FA403}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/samples/NotificationFlyoutSample/NotificationFlyoutSample.Host/Program.cs b/samples/NotificationFlyoutSample/NotificationFlyoutSample.Host/Program.cs index 2e523ad..34671c4 100644 --- a/samples/NotificationFlyoutSample/NotificationFlyoutSample.Host/Program.cs +++ b/samples/NotificationFlyoutSample/NotificationFlyoutSample.Host/Program.cs @@ -1,4 +1,5 @@ -using System; +using NotificationFlyout.Wpf.UI.Controls; +using System; namespace NotificationFlyoutSample.Host { @@ -10,7 +11,10 @@ namespace NotificationFlyoutSample.Host using (new NotificationFlyoutSample.App()) { var app = new App(); - new SampleNotificationFlyout(); + new NotificationFlyoutApplication + { + Flyout = new Shell() + }; app.Run(); } } diff --git a/samples/NotificationFlyoutSample/NotificationFlyoutSample.Host/SampleNotificationFlyout.xaml b/samples/NotificationFlyoutSample/NotificationFlyoutSample.Host/SampleNotificationFlyout.xaml deleted file mode 100644 index 6d456f7..0000000 --- a/samples/NotificationFlyoutSample/NotificationFlyoutSample.Host/SampleNotificationFlyout.xaml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/samples/NotificationFlyoutSample/NotificationFlyoutSample.Host/SampleNotificationFlyout.xaml.cs b/samples/NotificationFlyoutSample/NotificationFlyoutSample.Host/SampleNotificationFlyout.xaml.cs deleted file mode 100644 index d2795ec..0000000 --- a/samples/NotificationFlyoutSample/NotificationFlyoutSample.Host/SampleNotificationFlyout.xaml.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace NotificationFlyoutSample.Host -{ - public partial class SampleNotificationFlyout - { - public SampleNotificationFlyout() - { - InitializeComponent(); - } - } -} diff --git a/samples/NotificationFlyoutSample/NotificationFlyoutSample.sln b/samples/NotificationFlyoutSample/NotificationFlyoutSample.sln index 5940889..cf09d7a 100644 --- a/samples/NotificationFlyoutSample/NotificationFlyoutSample.sln +++ b/samples/NotificationFlyoutSample/NotificationFlyoutSample.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.30914.41 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NotificationFlyoutSample.Host", "NotificationFlyoutSample.Host\NotificationFlyoutSample.Host.csproj", "{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotificationFlyoutSample.Host", "NotificationFlyoutSample.Host\NotificationFlyoutSample.Host.csproj", "{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NotificationFlyoutSample", "NotificationFlyoutSample\NotificationFlyoutSample.csproj", "{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}" EndProject diff --git a/samples/NotificationFlyoutSample/NotificationFlyoutSample/Assets/Icon-Light.ico b/samples/NotificationFlyoutSample/NotificationFlyoutSample/Assets/Icon-Light.ico new file mode 100644 index 0000000000000000000000000000000000000000..5c7e7a84841b691da0a36d103f3a3c3b001931af GIT binary patch literal 18686 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 + + diff --git a/samples/NotificationFlyoutSample/NotificationFlyoutSample/Shell.xaml b/samples/NotificationFlyoutSample/NotificationFlyoutSample/Shell.xaml index 4168d62..a6e1b16 100644 --- a/samples/NotificationFlyoutSample/NotificationFlyoutSample/Shell.xaml +++ b/samples/NotificationFlyoutSample/NotificationFlyoutSample/Shell.xaml @@ -1,16 +1,83 @@ - - + xmlns:controls="using:NotificationFlyout.Uwp.UI.Controls" + xmlns:muxc="using:Microsoft.UI.Xaml.Controls" + IconSource="/Assets/Icon.ico" + LightIconSource="/Assets/Icon-Light.ico"> + + + + + + + + + + + + + + + + + + + + + + + + + + +