Compare commits
47 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 10499366d6 | |||
| 24bdc3caa2 | |||
| ab7ea6415d | |||
| 0a6b227fc6 | |||
| dd92d25d23 | |||
| b815985963 | |||
| 04de82cda0 | |||
| efc2f75d85 | |||
| 47540457b8 | |||
| 1800eefd5a | |||
| f9c688aa02 | |||
| 8e334912b9 | |||
| 5db230c83c | |||
| 240609270e | |||
| 737dbe9b32 | |||
| c408eafdde | |||
| f0b42d1551 | |||
| d25744a9f4 | |||
| 36f2953fd4 | |||
| bc42e0cff1 | |||
| d48d0bd590 | |||
| 6751bc914e | |||
| ac1ace291c | |||
| 60d2989ff5 | |||
| c995e45606 | |||
| 9fa476e57d | |||
| b96155be73 | |||
| 68107307b0 | |||
| 30b04b1fcc | |||
| 36259ccb6b | |||
| 49169b1044 | |||
| b920a4622a | |||
| 50033d9aa3 | |||
| 9869470c24 | |||
| 2ace378529 | |||
| 8dce9f882b | |||
| 2d74e40948 | |||
| cadf8f9ec0 | |||
| 266f1938c3 | |||
| 2401235aca | |||
| cef6e99e74 | |||
| ce314678b5 | |||
| 20441d5749 | |||
| c7b80cc997 | |||
| af1800e725 | |||
| ee7530b8b5 | |||
| 84afcf0be3 |
@@ -4,6 +4,12 @@ A Notification Flyout that looks and feels exactly like the native Volume, Netwo
|
|||||||
# Demo #
|
# Demo #
|
||||||
[](http://www.youtube.com/watch?v=8EoZ4pGWTkY "Notification flyout demo")
|
[](http://www.youtube.com/watch?v=8EoZ4pGWTkY "Notification flyout demo")
|
||||||
|
|
||||||
|
# Show case #
|
||||||
|
|
||||||
|
[NotificationFlyout.NowPlaying](https://github.com/TheXamlGuy/NotificationFlyout.NowPlaying)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
# Getting started #
|
# Getting started #
|
||||||
Many parts of this guide refers to the [Host a custom WinRT XAML control in a WPF app using XAML Islands](https://docs.microsoft.com/en-us/windows/apps/desktop/modernize/host-custom-control-with-xaml-islands) article. If in doubt, refer to the article, or post an issue on this repro.
|
Many parts of this guide refers to the [Host a custom WinRT XAML control in a WPF app using XAML Islands](https://docs.microsoft.com/en-us/windows/apps/desktop/modernize/host-custom-control-with-xaml-islands) article. If in doubt, refer to the article, or post an issue on this repro.
|
||||||
|
|
||||||
@@ -33,16 +39,14 @@ namespace MyUWPApp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
5. In the UWP app project, install the [NotificationFlyout.Uwp.UI.Controls](https://www.nuget.org/packages/NotificationFlyout.Uwp.UI.Controls/) NuGet package (latest stable version).
|
5. In the UWP app project, install the [TheXamlGuy.NotificationFlyout.Uwp.UI.Controls](https://www.nuget.org/packages/TheXamlGuy.NotificationFlyout.Uwp.UI.Controls/) NuGet package (latest stable version).
|
||||||
3. Open the `MainPage.xaml` file and replace the contents of this file with the following XAML. Replace `MyUWPApp` with the namespace of your UWP app project.
|
6. Open the `MainPage.xaml` file and replace the contents of this file with the following XAML. Replace `MyUWPApp` with the namespace of your UWP app project.
|
||||||
```xaml
|
```xaml
|
||||||
<controls:NotificationFlyout
|
<controls:NotificationFlyout
|
||||||
x:Class="MyUWPApp.MainPage"
|
x:Class="MyUWPApp.MainPage"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:controls="using:NotificationFlyout.Uwp.UI.Controls"
|
xmlns:controls="using:NotificationFlyout.Uwp.UI.Controls">
|
||||||
IconSource="/Assets/Icon.ico"
|
|
||||||
LightIconSource="/Assets/Icon-Light.ico">
|
|
||||||
<Grid Width="400" Height="500">
|
<Grid Width="400" Height="500">
|
||||||
<Button
|
<Button
|
||||||
HorizontalAlignment="Center"
|
HorizontalAlignment="Center"
|
||||||
@@ -51,8 +55,6 @@ namespace MyUWPApp
|
|||||||
</Grid>
|
</Grid>
|
||||||
</controls:NotificationFlyout>
|
</controls:NotificationFlyout>
|
||||||
```
|
```
|
||||||
5. In the UWP app project, add two icons (.ico) to the Assets folder.
|
|
||||||
6. Replace the values of `IconSource` and `LightIconSource` with the paths of the icons that you have added to your Assets folder.
|
|
||||||
7. Clean the UWP app project and then build it.
|
7. Clean the UWP app project and then build it.
|
||||||
|
|
||||||
## Create a WPF project ##
|
## Create a WPF project ##
|
||||||
@@ -72,7 +74,7 @@ namespace MyUWPApp
|
|||||||
</Project>
|
</Project>
|
||||||
```
|
```
|
||||||
5. In Solution Explorer, right-click the Dependencies node under the WPF project and add a reference to your UWP app project.
|
5. In Solution Explorer, right-click the Dependencies node under the WPF project and add a reference to your UWP app project.
|
||||||
6. In the WPF app project, install the [Microsoft.Toolkit.Wpf.UI.XamlHost](https://www.nuget.org/packages/Microsoft.Toolkit.Wpf.UI.XamlHost) and [NotificationFlyout.Wpf.UI.Controls](https://www.nuget.org/packages/NotificationFlyout.Wpf.UI.Controls/) NuGet packages (latest stable version).
|
6. In the WPF app project, install the [Microsoft.Toolkit.Wpf.UI.XamlHost](https://www.nuget.org/packages/Microsoft.Toolkit.Wpf.UI.XamlHost) and [TheXamlGuy.NotificationFlyout.Wpf.UI.Controls](https://www.nuget.org/packages/TheXamlGuy.NotificationFlyout.Wpf.UI.Controls/) NuGet packages (latest stable version).
|
||||||
7. Open the `App.xaml` file and replace the contents of this file with the following XAML. Replace `MyWPFApp` with the namespace of your WPF app project.
|
7. Open the `App.xaml` file and replace the contents of this file with the following XAML. Replace `MyWPFApp` with the namespace of your WPF app project.
|
||||||
```xaml
|
```xaml
|
||||||
<Application
|
<Application
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
<Project Sdk="MSBuild.Sdk.Extras">
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<OutputType>WinExe</OutputType>
|
|
||||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
|
||||||
<UseWPF>true</UseWPF>
|
|
||||||
<Platforms>x64</Platforms>
|
|
||||||
<AssetTargetFallback>uap10.0.19041</AssetTargetFallback>
|
|
||||||
<StartupObject>NotificationFlyoutSample.Host.Program</StartupObject>
|
|
||||||
<EnableTypeInfoReflection>false</EnableTypeInfoReflection>
|
|
||||||
<EnableXBindDiagnostics>false</EnableXBindDiagnostics>
|
|
||||||
<MSBuildWarningsAsMessages>NU1702</MSBuildWarningsAsMessages>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="Microsoft.Toolkit.Wpf.UI.XamlHost" Version="6.1.2" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\..\src\NotificationFlyout.Uwp.UI.Controls\NotificationFlyout.Uwp.UI.Controls.csproj" />
|
|
||||||
<ProjectReference Include="..\..\src\NotificationFlyout.Uwp.UI\NotificationFlyout.Uwp.UI.csproj" />
|
|
||||||
<ProjectReference Include="..\..\src\NotificationFlyout.Wpf.UI.Controls\NotificationFlyout.Wpf.UI.Controls.csproj" />
|
|
||||||
<ProjectReference Include="..\..\src\NotificationFlyout.Wpf.UI\NotificationFlyout.Wpf.UI.csproj" />
|
|
||||||
<ProjectReference Include="..\NotificationFlyoutSample\NotificationFlyoutSample.csproj" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
using NotificationFlyout.Wpf.UI.Controls;
|
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace NotificationFlyoutSample.Host
|
|
||||||
{
|
|
||||||
public class Program
|
|
||||||
{
|
|
||||||
[STAThread()]
|
|
||||||
public static void Main()
|
|
||||||
{
|
|
||||||
using (new NotificationFlyoutSample.App())
|
|
||||||
{
|
|
||||||
var app = new App();
|
|
||||||
new NotificationFlyoutApplication
|
|
||||||
{
|
|
||||||
Flyout = new Shell()
|
|
||||||
};
|
|
||||||
app.Run();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||||
|
<UseWPF>true</UseWPF>
|
||||||
|
<StartupObject>NotificationFlyoutSample.Host.Program</StartupObject>
|
||||||
|
<AssetTargetFallback>uap10.0.19041</AssetTargetFallback>
|
||||||
|
<Platforms>x64</Platforms>
|
||||||
|
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.Toolkit.Wpf.UI.XamlHost" Version="6.1.2" />
|
||||||
|
<PackageReference Include="Microsoft.Win32.Registry" Version="6.0.0-preview.1.21102.12" />
|
||||||
|
<PackageReference Include="System.Drawing.Common" Version="6.0.0-preview.1.21102.12" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\src\TheXamlGuy.NotificationFlyout.Common\TheXamlGuy.NotificationFlyout.Common.csproj" />
|
||||||
|
<ProjectReference Include="..\..\src\TheXamlGuy.NotificationFlyout.Shared.UI\TheXamlGuy.NotificationFlyout.Shared.UI.csproj" />
|
||||||
|
<ProjectReference Include="..\..\src\TheXamlGuy.NotificationFlyout.Uwp.UI.Controls\TheXamlGuy.NotificationFlyout.Uwp.UI.Controls.csproj" />
|
||||||
|
<ProjectReference Include="..\..\src\TheXamlGuy.NotificationFlyout.Wpf.UI.Controls\TheXamlGuy.NotificationFlyout.Wpf.UI.Controls.csproj" />
|
||||||
|
<ProjectReference Include="..\..\src\TheXamlGuy.NotificationFlyout.Wpf.UI\TheXamlGuy.NotificationFlyout.Wpf.UI.csproj" />
|
||||||
|
<ProjectReference Include="..\NotificationFlyoutSample\NotificationFlyoutSample.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Update="Microsoft.VCRTForwarders.140" Version="1.0.7" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
using NotificationFlyout.Wpf.UI.Controls;
|
using System;
|
||||||
using System;
|
using TheXamlGuy.NotificationFlyout.Wpf.UI.Controls;
|
||||||
|
|
||||||
namespace NotificationFlyoutSample.Host
|
namespace NotificationFlyoutSample.Host
|
||||||
{
|
{
|
||||||
@@ -13,8 +13,9 @@ namespace NotificationFlyoutSample.Host
|
|||||||
var app = new App();
|
var app = new App();
|
||||||
new NotificationFlyoutApplication
|
new NotificationFlyoutApplication
|
||||||
{
|
{
|
||||||
Flyout = new Shell()
|
Flyout = new SampleFlyout()
|
||||||
};
|
};
|
||||||
|
|
||||||
app.Run();
|
app.Run();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -50,12 +50,12 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(WapProjPath)\Microsoft.DesktopBridge.props" />
|
<Import Project="$(WapProjPath)\Microsoft.DesktopBridge.props" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ProjectGuid>e2f52d15-a3bb-41ce-901c-ab491c50327a</ProjectGuid>
|
<ProjectGuid>faa7e8e0-032d-4c2a-bab6-6e0eed3d5a6d</ProjectGuid>
|
||||||
<TargetPlatformVersion>10.0.19041.0</TargetPlatformVersion>
|
<TargetPlatformVersion>10.0.19041.0</TargetPlatformVersion>
|
||||||
<TargetPlatformMinVersion>10.0.19041.0</TargetPlatformMinVersion>
|
<TargetPlatformMinVersion>10.0.19041.0</TargetPlatformMinVersion>
|
||||||
<DefaultLanguage>en-US</DefaultLanguage>
|
<DefaultLanguage>en-US</DefaultLanguage>
|
||||||
<AppxPackageSigningEnabled>false</AppxPackageSigningEnabled>
|
<AppxPackageSigningEnabled>false</AppxPackageSigningEnabled>
|
||||||
<EntryPointProjectUniqueName>..\NotificationFlyoutSample.Host\NotificationFlyoutSample.Host.csproj</EntryPointProjectUniqueName>
|
<EntryPointProjectUniqueName>..\NotificationFlyoutSample.Launcher\NotificationFlyoutSample.Launcher.csproj</EntryPointProjectUniqueName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<AppxManifest Include="Package.appxmanifest">
|
<AppxManifest Include="Package.appxmanifest">
|
||||||
@@ -76,7 +76,7 @@
|
|||||||
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.19041.8" PrivateAssets="all" />
|
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.19041.8" PrivateAssets="all" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\NotificationFlyoutSample.Host\NotificationFlyoutSample.Host.csproj">
|
<ProjectReference Include="..\NotificationFlyoutSample.Launcher\NotificationFlyoutSample.Launcher.csproj">
|
||||||
<SkipGetTargetFrameworkProperties>True</SkipGetTargetFrameworkProperties>
|
<SkipGetTargetFrameworkProperties>True</SkipGetTargetFrameworkProperties>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
@@ -7,13 +7,13 @@
|
|||||||
IgnorableNamespaces="uap rescap">
|
IgnorableNamespaces="uap rescap">
|
||||||
|
|
||||||
<Identity
|
<Identity
|
||||||
Name="b15dd450-41a7-49e9-bc4f-8192a7063ae2"
|
Name="541ef8e5-df48-4089-bae4-7851e8c5d592"
|
||||||
Publisher="CN=dan"
|
Publisher="CN=Daniel Clark"
|
||||||
Version="1.0.0.0" />
|
Version="1.0.0.0" />
|
||||||
|
|
||||||
<Properties>
|
<Properties>
|
||||||
<DisplayName>NotificationFlyoutSample.Package</DisplayName>
|
<DisplayName>NotificationFlyoutSample.Package</DisplayName>
|
||||||
<PublisherDisplayName>dan</PublisherDisplayName>
|
<PublisherDisplayName>Daniel Clark</PublisherDisplayName>
|
||||||
<Logo>Images\StoreLogo.png</Logo>
|
<Logo>Images\StoreLogo.png</Logo>
|
||||||
</Properties>
|
</Properties>
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
|||||||
# Visual Studio Version 16
|
# Visual Studio Version 16
|
||||||
VisualStudioVersion = 16.0.30914.41
|
VisualStudioVersion = 16.0.30914.41
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
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}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NotificationFlyoutSample", "NotificationFlyoutSample\NotificationFlyoutSample.csproj", "{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{1E895953-2231-4ACA-84A6-64F8F57FE86A}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{1E895953-2231-4ACA-84A6-64F8F57FE86A}"
|
||||||
@@ -12,15 +10,17 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
|
|||||||
global.json = global.json
|
global.json = global.json
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotificationFlyout.Uwp.UI.Controls", "..\src\NotificationFlyout.Uwp.UI.Controls\NotificationFlyout.Uwp.UI.Controls.csproj", "{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotificationFlyoutSample.Launcher", "NotificationFlyoutSample.Launcher\NotificationFlyoutSample.Launcher.csproj", "{5EDD254A-3F8E-4825-B806-5C230488E192}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotificationFlyout.Wpf.UI", "..\src\NotificationFlyout.Wpf.UI\NotificationFlyout.Wpf.UI.csproj", "{49BCC188-22D2-468B-89EA-99C810BE790E}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TheXamlGuy.NotificationFlyout.Common", "..\src\TheXamlGuy.NotificationFlyout.Common\TheXamlGuy.NotificationFlyout.Common.csproj", "{5EE122E5-AFD9-4B03-A98D-34CBB0B3B3F0}"
|
||||||
EndProject
|
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}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TheXamlGuy.NotificationFlyout.Shared.UI", "..\src\TheXamlGuy.NotificationFlyout.Shared.UI\TheXamlGuy.NotificationFlyout.Shared.UI.csproj", "{875E7116-3A9B-4CBE-B6D0-20818DB77280}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "NotificationFlyoutSample.Package", "NotificationFlyoutSample.Package\NotificationFlyoutSample.Package.wapproj", "{E2F52D15-A3BB-41CE-901C-AB491C50327A}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TheXamlGuy.NotificationFlyout.Uwp.UI.Controls", "..\src\TheXamlGuy.NotificationFlyout.Uwp.UI.Controls\TheXamlGuy.NotificationFlyout.Uwp.UI.Controls.csproj", "{0C268B32-CED0-4F79-9CB0-B7AE84BE9EC8}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotificationFlyout.Uwp.UI", "..\src\NotificationFlyout.Uwp.UI\NotificationFlyout.Uwp.UI.csproj", "{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TheXamlGuy.NotificationFlyout.Wpf.UI", "..\src\TheXamlGuy.NotificationFlyout.Wpf.UI\TheXamlGuy.NotificationFlyout.Wpf.UI.csproj", "{F6040CB8-83EE-47B9-8DD7-DF43CD555956}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TheXamlGuy.NotificationFlyout.Wpf.UI.Controls", "..\src\TheXamlGuy.NotificationFlyout.Wpf.UI.Controls\TheXamlGuy.NotificationFlyout.Wpf.UI.Controls.csproj", "{66433384-A10C-44A5-B734-400990A569F0}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
@@ -36,26 +36,6 @@ Global
|
|||||||
Release|x86 = Release|x86
|
Release|x86 = Release|x86
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Debug|Any CPU.ActiveCfg = Debug|x64
|
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Debug|Any CPU.Build.0 = Debug|x64
|
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Debug|ARM.Build.0 = Debug|Any CPU
|
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Debug|ARM64.Build.0 = Debug|Any CPU
|
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Debug|x86.ActiveCfg = Debug|Any CPU
|
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Debug|x86.Build.0 = Debug|Any CPU
|
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Release|ARM.ActiveCfg = Release|Any CPU
|
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Release|ARM.Build.0 = Release|Any CPU
|
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Release|ARM64.ActiveCfg = Release|Any CPU
|
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Release|ARM64.Build.0 = Release|Any CPU
|
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Release|x64.ActiveCfg = Release|Any CPU
|
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Release|x64.Build.0 = Release|Any CPU
|
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Release|x86.ActiveCfg = Release|Any CPU
|
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Release|x86.Build.0 = Release|Any CPU
|
|
||||||
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Debug|Any CPU.ActiveCfg = Debug|x64
|
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||||
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Debug|Any CPU.Build.0 = Debug|x64
|
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Debug|Any CPU.Build.0 = Debug|x64
|
||||||
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Debug|ARM.ActiveCfg = Debug|ARM
|
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||||
@@ -83,116 +63,126 @@ Global
|
|||||||
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Release|x86.ActiveCfg = Release|x86
|
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Release|x86.ActiveCfg = Release|x86
|
||||||
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Release|x86.Build.0 = Release|x86
|
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Release|x86.Build.0 = Release|x86
|
||||||
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Release|x86.Deploy.0 = Release|x86
|
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Release|x86.Deploy.0 = Release|x86
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Debug|Any CPU.ActiveCfg = Debug|x64
|
{5EDD254A-3F8E-4825-B806-5C230488E192}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Debug|Any CPU.Build.0 = Debug|x64
|
{5EDD254A-3F8E-4825-B806-5C230488E192}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
{5EDD254A-3F8E-4825-B806-5C230488E192}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Debug|ARM.Build.0 = Debug|Any CPU
|
{5EDD254A-3F8E-4825-B806-5C230488E192}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
{5EDD254A-3F8E-4825-B806-5C230488E192}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Debug|ARM64.Build.0 = Debug|Any CPU
|
{5EDD254A-3F8E-4825-B806-5C230488E192}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Debug|x64.ActiveCfg = Debug|x64
|
{5EDD254A-3F8E-4825-B806-5C230488E192}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Debug|x64.Build.0 = Debug|x64
|
{5EDD254A-3F8E-4825-B806-5C230488E192}.Debug|x64.Build.0 = Debug|x64
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
{5EDD254A-3F8E-4825-B806-5C230488E192}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Debug|x86.Build.0 = Debug|Any CPU
|
{5EDD254A-3F8E-4825-B806-5C230488E192}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{5EDD254A-3F8E-4825-B806-5C230488E192}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Release|Any CPU.Build.0 = Release|Any CPU
|
{5EDD254A-3F8E-4825-B806-5C230488E192}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Release|ARM.ActiveCfg = Release|Any CPU
|
{5EDD254A-3F8E-4825-B806-5C230488E192}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Release|ARM.Build.0 = Release|Any CPU
|
{5EDD254A-3F8E-4825-B806-5C230488E192}.Release|ARM.Build.0 = Release|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Release|ARM64.ActiveCfg = Release|Any CPU
|
{5EDD254A-3F8E-4825-B806-5C230488E192}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Release|ARM64.Build.0 = Release|Any CPU
|
{5EDD254A-3F8E-4825-B806-5C230488E192}.Release|ARM64.Build.0 = Release|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Release|x64.ActiveCfg = Release|x64
|
{5EDD254A-3F8E-4825-B806-5C230488E192}.Release|x64.ActiveCfg = Release|x64
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Release|x64.Build.0 = Release|x64
|
{5EDD254A-3F8E-4825-B806-5C230488E192}.Release|x64.Build.0 = Release|x64
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Release|x86.ActiveCfg = Release|Any CPU
|
{5EDD254A-3F8E-4825-B806-5C230488E192}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Release|x86.Build.0 = Release|Any CPU
|
{5EDD254A-3F8E-4825-B806-5C230488E192}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Debug|Any CPU.ActiveCfg = Debug|x64
|
{5EE122E5-AFD9-4B03-A98D-34CBB0B3B3F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Debug|Any CPU.Build.0 = Debug|x64
|
{5EE122E5-AFD9-4B03-A98D-34CBB0B3B3F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
{5EE122E5-AFD9-4B03-A98D-34CBB0B3B3F0}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Debug|ARM.Build.0 = Debug|Any CPU
|
{5EE122E5-AFD9-4B03-A98D-34CBB0B3B3F0}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
{5EE122E5-AFD9-4B03-A98D-34CBB0B3B3F0}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Debug|ARM64.Build.0 = Debug|Any CPU
|
{5EE122E5-AFD9-4B03-A98D-34CBB0B3B3F0}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Debug|x64.ActiveCfg = Debug|x64
|
{5EE122E5-AFD9-4B03-A98D-34CBB0B3B3F0}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Debug|x64.Build.0 = Debug|x64
|
{5EE122E5-AFD9-4B03-A98D-34CBB0B3B3F0}.Debug|x64.Build.0 = Debug|x64
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
{5EE122E5-AFD9-4B03-A98D-34CBB0B3B3F0}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Debug|x86.Build.0 = Debug|Any CPU
|
{5EE122E5-AFD9-4B03-A98D-34CBB0B3B3F0}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{5EE122E5-AFD9-4B03-A98D-34CBB0B3B3F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Release|Any CPU.Build.0 = Release|Any CPU
|
{5EE122E5-AFD9-4B03-A98D-34CBB0B3B3F0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Release|ARM.ActiveCfg = Release|Any CPU
|
{5EE122E5-AFD9-4B03-A98D-34CBB0B3B3F0}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Release|ARM.Build.0 = Release|Any CPU
|
{5EE122E5-AFD9-4B03-A98D-34CBB0B3B3F0}.Release|ARM.Build.0 = Release|Any CPU
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Release|ARM64.ActiveCfg = Release|Any CPU
|
{5EE122E5-AFD9-4B03-A98D-34CBB0B3B3F0}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Release|ARM64.Build.0 = Release|Any CPU
|
{5EE122E5-AFD9-4B03-A98D-34CBB0B3B3F0}.Release|ARM64.Build.0 = Release|Any CPU
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Release|x64.ActiveCfg = Release|x64
|
{5EE122E5-AFD9-4B03-A98D-34CBB0B3B3F0}.Release|x64.ActiveCfg = Release|x64
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Release|x64.Build.0 = Release|x64
|
{5EE122E5-AFD9-4B03-A98D-34CBB0B3B3F0}.Release|x64.Build.0 = Release|x64
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Release|x86.ActiveCfg = Release|Any CPU
|
{5EE122E5-AFD9-4B03-A98D-34CBB0B3B3F0}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Release|x86.Build.0 = Release|Any CPU
|
{5EE122E5-AFD9-4B03-A98D-34CBB0B3B3F0}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Debug|Any CPU.ActiveCfg = Debug|x64
|
{875E7116-3A9B-4CBE-B6D0-20818DB77280}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Debug|Any CPU.Build.0 = Debug|x64
|
{875E7116-3A9B-4CBE-B6D0-20818DB77280}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
{875E7116-3A9B-4CBE-B6D0-20818DB77280}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Debug|ARM.Build.0 = Debug|Any CPU
|
{875E7116-3A9B-4CBE-B6D0-20818DB77280}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
{875E7116-3A9B-4CBE-B6D0-20818DB77280}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Debug|ARM64.Build.0 = Debug|Any CPU
|
{875E7116-3A9B-4CBE-B6D0-20818DB77280}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Debug|x64.ActiveCfg = Debug|x64
|
{875E7116-3A9B-4CBE-B6D0-20818DB77280}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Debug|x64.Build.0 = Debug|x64
|
{875E7116-3A9B-4CBE-B6D0-20818DB77280}.Debug|x64.Build.0 = Debug|x64
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Debug|x86.ActiveCfg = Debug|Any CPU
|
{875E7116-3A9B-4CBE-B6D0-20818DB77280}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Debug|x86.Build.0 = Debug|Any CPU
|
{875E7116-3A9B-4CBE-B6D0-20818DB77280}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{875E7116-3A9B-4CBE-B6D0-20818DB77280}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Release|Any CPU.Build.0 = Release|Any CPU
|
{875E7116-3A9B-4CBE-B6D0-20818DB77280}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Release|ARM.ActiveCfg = Release|Any CPU
|
{875E7116-3A9B-4CBE-B6D0-20818DB77280}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Release|ARM.Build.0 = Release|Any CPU
|
{875E7116-3A9B-4CBE-B6D0-20818DB77280}.Release|ARM.Build.0 = Release|Any CPU
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Release|ARM64.ActiveCfg = Release|Any CPU
|
{875E7116-3A9B-4CBE-B6D0-20818DB77280}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Release|ARM64.Build.0 = Release|Any CPU
|
{875E7116-3A9B-4CBE-B6D0-20818DB77280}.Release|ARM64.Build.0 = Release|Any CPU
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Release|x64.ActiveCfg = Release|x64
|
{875E7116-3A9B-4CBE-B6D0-20818DB77280}.Release|x64.ActiveCfg = Release|x64
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Release|x64.Build.0 = Release|x64
|
{875E7116-3A9B-4CBE-B6D0-20818DB77280}.Release|x64.Build.0 = Release|x64
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Release|x86.ActiveCfg = Release|Any CPU
|
{875E7116-3A9B-4CBE-B6D0-20818DB77280}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Release|x86.Build.0 = Release|Any CPU
|
{875E7116-3A9B-4CBE-B6D0-20818DB77280}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Debug|Any CPU.ActiveCfg = Debug|x64
|
{0C268B32-CED0-4F79-9CB0-B7AE84BE9EC8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Debug|Any CPU.Build.0 = Debug|x64
|
{0C268B32-CED0-4F79-9CB0-B7AE84BE9EC8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Debug|Any CPU.Deploy.0 = Debug|x64
|
{0C268B32-CED0-4F79-9CB0-B7AE84BE9EC8}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Debug|ARM.ActiveCfg = Debug|ARM
|
{0C268B32-CED0-4F79-9CB0-B7AE84BE9EC8}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Debug|ARM.Build.0 = Debug|ARM
|
{0C268B32-CED0-4F79-9CB0-B7AE84BE9EC8}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Debug|ARM.Deploy.0 = Debug|ARM
|
{0C268B32-CED0-4F79-9CB0-B7AE84BE9EC8}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
{0C268B32-CED0-4F79-9CB0-B7AE84BE9EC8}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Debug|ARM64.Build.0 = Debug|ARM64
|
{0C268B32-CED0-4F79-9CB0-B7AE84BE9EC8}.Debug|x64.Build.0 = Debug|x64
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Debug|ARM64.Deploy.0 = Debug|ARM64
|
{0C268B32-CED0-4F79-9CB0-B7AE84BE9EC8}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Debug|x64.ActiveCfg = Debug|x64
|
{0C268B32-CED0-4F79-9CB0-B7AE84BE9EC8}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Debug|x64.Build.0 = Debug|x64
|
{0C268B32-CED0-4F79-9CB0-B7AE84BE9EC8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Debug|x64.Deploy.0 = Debug|x64
|
{0C268B32-CED0-4F79-9CB0-B7AE84BE9EC8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Debug|x86.ActiveCfg = Debug|x86
|
{0C268B32-CED0-4F79-9CB0-B7AE84BE9EC8}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Debug|x86.Build.0 = Debug|x86
|
{0C268B32-CED0-4F79-9CB0-B7AE84BE9EC8}.Release|ARM.Build.0 = Release|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Debug|x86.Deploy.0 = Debug|x86
|
{0C268B32-CED0-4F79-9CB0-B7AE84BE9EC8}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{0C268B32-CED0-4F79-9CB0-B7AE84BE9EC8}.Release|ARM64.Build.0 = Release|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Release|Any CPU.Build.0 = Release|Any CPU
|
{0C268B32-CED0-4F79-9CB0-B7AE84BE9EC8}.Release|x64.ActiveCfg = Release|x64
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Release|Any CPU.Deploy.0 = Release|Any CPU
|
{0C268B32-CED0-4F79-9CB0-B7AE84BE9EC8}.Release|x64.Build.0 = Release|x64
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Release|ARM.ActiveCfg = Release|ARM
|
{0C268B32-CED0-4F79-9CB0-B7AE84BE9EC8}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Release|ARM.Build.0 = Release|ARM
|
{0C268B32-CED0-4F79-9CB0-B7AE84BE9EC8}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Release|ARM.Deploy.0 = Release|ARM
|
{F6040CB8-83EE-47B9-8DD7-DF43CD555956}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Release|ARM64.ActiveCfg = Release|ARM64
|
{F6040CB8-83EE-47B9-8DD7-DF43CD555956}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Release|ARM64.Build.0 = Release|ARM64
|
{F6040CB8-83EE-47B9-8DD7-DF43CD555956}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Release|ARM64.Deploy.0 = Release|ARM64
|
{F6040CB8-83EE-47B9-8DD7-DF43CD555956}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Release|x64.ActiveCfg = Release|x64
|
{F6040CB8-83EE-47B9-8DD7-DF43CD555956}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Release|x64.Build.0 = Release|x64
|
{F6040CB8-83EE-47B9-8DD7-DF43CD555956}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Release|x64.Deploy.0 = Release|x64
|
{F6040CB8-83EE-47B9-8DD7-DF43CD555956}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Release|x86.ActiveCfg = Release|x86
|
{F6040CB8-83EE-47B9-8DD7-DF43CD555956}.Debug|x64.Build.0 = Debug|x64
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Release|x86.Build.0 = Release|x86
|
{F6040CB8-83EE-47B9-8DD7-DF43CD555956}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
{E2F52D15-A3BB-41CE-901C-AB491C50327A}.Release|x86.Deploy.0 = Release|x86
|
{F6040CB8-83EE-47B9-8DD7-DF43CD555956}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{F6040CB8-83EE-47B9-8DD7-DF43CD555956}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{F6040CB8-83EE-47B9-8DD7-DF43CD555956}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
{F6040CB8-83EE-47B9-8DD7-DF43CD555956}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||||
{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Debug|ARM.Build.0 = Debug|Any CPU
|
{F6040CB8-83EE-47B9-8DD7-DF43CD555956}.Release|ARM.Build.0 = Release|Any CPU
|
||||||
{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
{F6040CB8-83EE-47B9-8DD7-DF43CD555956}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||||
{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Debug|ARM64.Build.0 = Debug|Any CPU
|
{F6040CB8-83EE-47B9-8DD7-DF43CD555956}.Release|ARM64.Build.0 = Release|Any CPU
|
||||||
{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Debug|x64.ActiveCfg = Debug|x64
|
{F6040CB8-83EE-47B9-8DD7-DF43CD555956}.Release|x64.ActiveCfg = Release|x64
|
||||||
{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Debug|x64.Build.0 = Debug|x64
|
{F6040CB8-83EE-47B9-8DD7-DF43CD555956}.Release|x64.Build.0 = Release|x64
|
||||||
{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Debug|x86.ActiveCfg = Debug|Any CPU
|
{F6040CB8-83EE-47B9-8DD7-DF43CD555956}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Debug|x86.Build.0 = Debug|Any CPU
|
{F6040CB8-83EE-47B9-8DD7-DF43CD555956}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{66433384-A10C-44A5-B734-400990A569F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Release|Any CPU.Build.0 = Release|Any CPU
|
{66433384-A10C-44A5-B734-400990A569F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Release|ARM.ActiveCfg = Release|Any CPU
|
{66433384-A10C-44A5-B734-400990A569F0}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||||
{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Release|ARM.Build.0 = Release|Any CPU
|
{66433384-A10C-44A5-B734-400990A569F0}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||||
{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Release|ARM64.ActiveCfg = Release|Any CPU
|
{66433384-A10C-44A5-B734-400990A569F0}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||||
{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Release|ARM64.Build.0 = Release|Any CPU
|
{66433384-A10C-44A5-B734-400990A569F0}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||||
{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Release|x64.ActiveCfg = Release|x64
|
{66433384-A10C-44A5-B734-400990A569F0}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Release|x64.Build.0 = Release|x64
|
{66433384-A10C-44A5-B734-400990A569F0}.Debug|x64.Build.0 = Debug|x64
|
||||||
{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Release|x86.ActiveCfg = Release|Any CPU
|
{66433384-A10C-44A5-B734-400990A569F0}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}.Release|x86.Build.0 = Release|Any CPU
|
{66433384-A10C-44A5-B734-400990A569F0}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{66433384-A10C-44A5-B734-400990A569F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{66433384-A10C-44A5-B734-400990A569F0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{66433384-A10C-44A5-B734-400990A569F0}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||||
|
{66433384-A10C-44A5-B734-400990A569F0}.Release|ARM.Build.0 = Release|Any CPU
|
||||||
|
{66433384-A10C-44A5-B734-400990A569F0}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||||
|
{66433384-A10C-44A5-B734-400990A569F0}.Release|ARM64.Build.0 = Release|Any CPU
|
||||||
|
{66433384-A10C-44A5-B734-400990A569F0}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{66433384-A10C-44A5-B734-400990A569F0}.Release|x64.Build.0 = Release|x64
|
||||||
|
{66433384-A10C-44A5-B734-400990A569F0}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{66433384-A10C-44A5-B734-400990A569F0}.Release|x86.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 18 KiB |
@@ -1,6 +0,0 @@
|
|||||||
<Application
|
|
||||||
x:Class="NotificationFlyoutSample.Host.App"
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
|
||||||
<Application.Resources />
|
|
||||||
</Application>
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Configuration;
|
|
||||||
using System.Data;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows;
|
|
||||||
|
|
||||||
namespace NotificationFlyoutSample.Host
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Interaction logic for App.xaml
|
|
||||||
/// </summary>
|
|
||||||
public partial class App : Application
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
using System.Windows;
|
|
||||||
|
|
||||||
[assembly: ThemeInfo(
|
|
||||||
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
|
|
||||||
//(used if a resource is not found in the page,
|
|
||||||
// or application resource dictionaries)
|
|
||||||
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
|
|
||||||
//(used if a resource is not found in the page,
|
|
||||||
// app, or any theme specific resource dictionaries)
|
|
||||||
)]
|
|
||||||
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 18 KiB |
@@ -1,35 +0,0 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<OutputType>WinExe</OutputType>
|
|
||||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
|
||||||
<UseWPF>true</UseWPF>
|
|
||||||
<Platforms>x64</Platforms>
|
|
||||||
<AssetTargetFallback>uap10.0.19041</AssetTargetFallback>
|
|
||||||
<StartupObject>NotificationFlyoutSample.Host.Program</StartupObject>
|
|
||||||
<EnableTypeInfoReflection>false</EnableTypeInfoReflection>
|
|
||||||
<EnableXBindDiagnostics>false</EnableXBindDiagnostics>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<None Remove="Assets\Icon-Light.ico" />
|
|
||||||
<None Remove="Assets\Icon.ico" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="Microsoft.Toolkit.Wpf.UI.XamlHost" Version="6.1.2" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\..\..\src\NotificationFlyout.Uwp.UI.Controls\NotificationFlyout.Uwp.UI.Controls.csproj" />
|
|
||||||
<ProjectReference Include="..\..\..\src\NotificationFlyout.Wpf.UI.Controls\NotificationFlyout.Wpf.UI.Controls.csproj" />
|
|
||||||
<ProjectReference Include="..\..\..\src\NotificationFlyout.Wpf.UI\NotificationFlyout.Wpf.UI.csproj" />
|
|
||||||
<ProjectReference Include="..\NotificationFlyoutSample\NotificationFlyoutSample.csproj" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Resource Include="Assets\Icon-Light.ico" />
|
|
||||||
<Resource Include="Assets\Icon.ico" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
|
||||||
@@ -120,11 +120,11 @@
|
|||||||
<DependentUpon>App.xaml</DependentUpon>
|
<DependentUpon>App.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="Shell.xaml.cs">
|
<Compile Include="SampleFlyout.xaml.cs">
|
||||||
<DependentUpon>Shell.xaml</DependentUpon>
|
<DependentUpon>SampleFlyout.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="WindowContent.xaml.cs">
|
<Compile Include="Test.xaml.cs">
|
||||||
<DependentUpon>WindowContent.xaml</DependentUpon>
|
<DependentUpon>Test.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -133,8 +133,6 @@
|
|||||||
</AppxManifest>
|
</AppxManifest>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="Assets\Icon-Light.ico" />
|
|
||||||
<Content Include="Assets\Icon.ico" />
|
|
||||||
<Content Include="Properties\Default.rd.xml" />
|
<Content Include="Properties\Default.rd.xml" />
|
||||||
<Content Include="Assets\LockScreenLogo.scale-200.png" />
|
<Content Include="Assets\LockScreenLogo.scale-200.png" />
|
||||||
<Content Include="Assets\SplashScreen.scale-200.png" />
|
<Content Include="Assets\SplashScreen.scale-200.png" />
|
||||||
@@ -152,7 +150,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform">
|
<PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform">
|
||||||
<Version>6.2.11</Version>
|
<Version>6.2.12</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.Toolkit.Win32.UI.XamlApplication">
|
<PackageReference Include="Microsoft.Toolkit.Win32.UI.XamlApplication">
|
||||||
<Version>6.1.2</Version>
|
<Version>6.1.2</Version>
|
||||||
@@ -162,24 +160,24 @@
|
|||||||
</PackageReference>
|
</PackageReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Page Include="Shell.xaml">
|
<Page Include="SampleFlyout.xaml">
|
||||||
<SubType>Designer</SubType>
|
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
</Page>
|
</Page>
|
||||||
<Page Include="WindowContent.xaml">
|
<Page Include="Test.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
</Page>
|
</Page>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\src\NotificationFlyout.Uwp.UI.Controls\NotificationFlyout.Uwp.UI.Controls.csproj">
|
<Reference Include="TheXamlGuy.NotificationFlyout.Shared.UI, Version=0.0.0.0, Culture=neutral, processorArchitecture=AMD64">
|
||||||
<Project>{95f851e4-87a5-4bb7-953e-c0fe3b306f0e}</Project>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<Name>NotificationFlyout.Uwp.UI.Controls</Name>
|
<HintPath>..\..\src\TheXamlGuy.NotificationFlyout.Shared.UI\bin\x64\Release\uap10.0.19041\TheXamlGuy.NotificationFlyout.Shared.UI.dll</HintPath>
|
||||||
</ProjectReference>
|
</Reference>
|
||||||
<ProjectReference Include="..\..\src\NotificationFlyout.Uwp.UI\NotificationFlyout.Uwp.UI.csproj">
|
<Reference Include="TheXamlGuy.NotificationFlyout.Uwp.UI.Controls, Version=1.0.0.0, Culture=neutral, processorArchitecture=AMD64">
|
||||||
<Project>{AFCE4980-A641-4BBB-A745-F0D4E54A0D86}</Project>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<Name>NotificationFlyout.Uwp.UI</Name>
|
<HintPath>..\..\src\TheXamlGuy.NotificationFlyout.Uwp.UI.Controls\bin\x64\Release\uap10.0.19041\TheXamlGuy.NotificationFlyout.Uwp.UI.Controls.dll</HintPath>
|
||||||
</ProjectReference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
|
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
|
||||||
<VisualStudioVersion>14.0</VisualStudioVersion>
|
<VisualStudioVersion>14.0</VisualStudioVersion>
|
||||||
@@ -196,5 +194,6 @@
|
|||||||
<EnableTypeInfoReflection>false</EnableTypeInfoReflection>
|
<EnableTypeInfoReflection>false</EnableTypeInfoReflection>
|
||||||
<EnableXBindDiagnostics>false</EnableXBindDiagnostics>
|
<EnableXBindDiagnostics>false</EnableXBindDiagnostics>
|
||||||
<MSBuildWarningsAsMessages>CS8305</MSBuildWarningsAsMessages>
|
<MSBuildWarningsAsMessages>CS8305</MSBuildWarningsAsMessages>
|
||||||
|
<LangVersion>8.0</LangVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -3,22 +3,24 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
|||||||
# Visual Studio Version 16
|
# Visual Studio Version 16
|
||||||
VisualStudioVersion = 16.0.30914.41
|
VisualStudioVersion = 16.0.30914.41
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
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
|
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{1E895953-2231-4ACA-84A6-64F8F57FE86A}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{1E895953-2231-4ACA-84A6-64F8F57FE86A}"
|
||||||
ProjectSection(SolutionItems) = preProject
|
ProjectSection(SolutionItems) = preProject
|
||||||
global.json = global.json
|
global.json = global.json
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotificationFlyout.Uwp.UI.Controls", "..\..\src\NotificationFlyout.Uwp.UI.Controls\NotificationFlyout.Uwp.UI.Controls.csproj", "{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TheXamlGuy.NotificationFlyout.Common", "..\..\src\TheXamlGuy.NotificationFlyout.Common\TheXamlGuy.NotificationFlyout.Common.csproj", "{C59F605A-7AAF-43E5-A312-85B9771F2FE4}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotificationFlyout.Wpf.UI", "..\..\src\NotificationFlyout.Wpf.UI\NotificationFlyout.Wpf.UI.csproj", "{49BCC188-22D2-468B-89EA-99C810BE790E}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TheXamlGuy.NotificationFlyout.Shared.UI", "..\..\src\TheXamlGuy.NotificationFlyout.Shared.UI\TheXamlGuy.NotificationFlyout.Shared.UI.csproj", "{E313D2F7-6515-4B8E-8F81-7E886E866853}"
|
||||||
EndProject
|
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}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TheXamlGuy.NotificationFlyout.Uwp.UI.Controls", "..\..\src\TheXamlGuy.NotificationFlyout.Uwp.UI.Controls\TheXamlGuy.NotificationFlyout.Uwp.UI.Controls.csproj", "{A970D11A-AD9F-4A3F-A509-16FA5F9AC779}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotificationFlyout.Uwp.UI", "..\..\src\NotificationFlyout.Uwp.UI\NotificationFlyout.Uwp.UI.csproj", "{ADE190A2-F751-4836-B8F4-BF56694A4B3F}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TheXamlGuy.NotificationFlyout.Wpf.UI", "..\..\src\TheXamlGuy.NotificationFlyout.Wpf.UI\TheXamlGuy.NotificationFlyout.Wpf.UI.csproj", "{4FBDACA8-7A79-40E4-A20D-30139A37C680}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TheXamlGuy.NotificationFlyout.Wpf.UI.Controls", "..\..\src\TheXamlGuy.NotificationFlyout.Wpf.UI.Controls\TheXamlGuy.NotificationFlyout.Wpf.UI.Controls.csproj", "{0AB1D328-BBB0-434B-965A-48ACDB6CBFB7}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NotificationFlyoutSample", "NotificationFlyoutSample.csproj", "{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotificationFlyoutSample.Launcher", "..\NotificationFlyoutSample.Launcher\NotificationFlyoutSample.Launcher.csproj", "{DB86CC51-8AA1-46A4-B382-B05DE08E0FF6}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
@@ -34,28 +36,107 @@ Global
|
|||||||
Release|x86 = Release|x86
|
Release|x86 = Release|x86
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Debug|Any CPU.ActiveCfg = Debug|x64
|
{C59F605A-7AAF-43E5-A312-85B9771F2FE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Debug|Any CPU.Build.0 = Debug|x64
|
{C59F605A-7AAF-43E5-A312-85B9771F2FE4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
{C59F605A-7AAF-43E5-A312-85B9771F2FE4}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Debug|ARM.Build.0 = Debug|Any CPU
|
{C59F605A-7AAF-43E5-A312-85B9771F2FE4}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
{C59F605A-7AAF-43E5-A312-85B9771F2FE4}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Debug|ARM64.Build.0 = Debug|Any CPU
|
{C59F605A-7AAF-43E5-A312-85B9771F2FE4}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Debug|x64.ActiveCfg = Debug|x64
|
{C59F605A-7AAF-43E5-A312-85B9771F2FE4}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Debug|x64.Build.0 = Debug|x64
|
{C59F605A-7AAF-43E5-A312-85B9771F2FE4}.Debug|x64.Build.0 = Debug|x64
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Debug|x86.ActiveCfg = Debug|Any CPU
|
{C59F605A-7AAF-43E5-A312-85B9771F2FE4}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Debug|x86.Build.0 = Debug|Any CPU
|
{C59F605A-7AAF-43E5-A312-85B9771F2FE4}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{C59F605A-7AAF-43E5-A312-85B9771F2FE4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Release|Any CPU.Build.0 = Release|Any CPU
|
{C59F605A-7AAF-43E5-A312-85B9771F2FE4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Release|ARM.ActiveCfg = Release|Any CPU
|
{C59F605A-7AAF-43E5-A312-85B9771F2FE4}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Release|ARM.Build.0 = Release|Any CPU
|
{C59F605A-7AAF-43E5-A312-85B9771F2FE4}.Release|ARM.Build.0 = Release|Any CPU
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Release|ARM64.ActiveCfg = Release|Any CPU
|
{C59F605A-7AAF-43E5-A312-85B9771F2FE4}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Release|ARM64.Build.0 = Release|Any CPU
|
{C59F605A-7AAF-43E5-A312-85B9771F2FE4}.Release|ARM64.Build.0 = Release|Any CPU
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Release|x64.ActiveCfg = Release|Any CPU
|
{C59F605A-7AAF-43E5-A312-85B9771F2FE4}.Release|x64.ActiveCfg = Release|x64
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Release|x64.Build.0 = Release|Any CPU
|
{C59F605A-7AAF-43E5-A312-85B9771F2FE4}.Release|x64.Build.0 = Release|x64
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Release|x86.ActiveCfg = Release|Any CPU
|
{C59F605A-7AAF-43E5-A312-85B9771F2FE4}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{D13742AD-DB71-4269-B3AF-7CA8C4E51A19}.Release|x86.Build.0 = Release|Any CPU
|
{C59F605A-7AAF-43E5-A312-85B9771F2FE4}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Debug|Any CPU.ActiveCfg = Debug|x64
|
{E313D2F7-6515-4B8E-8F81-7E886E866853}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Debug|Any CPU.Build.0 = Debug|x64
|
{E313D2F7-6515-4B8E-8F81-7E886E866853}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{E313D2F7-6515-4B8E-8F81-7E886E866853}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||||
|
{E313D2F7-6515-4B8E-8F81-7E886E866853}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||||
|
{E313D2F7-6515-4B8E-8F81-7E886E866853}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||||
|
{E313D2F7-6515-4B8E-8F81-7E886E866853}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||||
|
{E313D2F7-6515-4B8E-8F81-7E886E866853}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{E313D2F7-6515-4B8E-8F81-7E886E866853}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{E313D2F7-6515-4B8E-8F81-7E886E866853}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{E313D2F7-6515-4B8E-8F81-7E886E866853}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{E313D2F7-6515-4B8E-8F81-7E886E866853}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{E313D2F7-6515-4B8E-8F81-7E886E866853}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{E313D2F7-6515-4B8E-8F81-7E886E866853}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||||
|
{E313D2F7-6515-4B8E-8F81-7E886E866853}.Release|ARM.Build.0 = Release|Any CPU
|
||||||
|
{E313D2F7-6515-4B8E-8F81-7E886E866853}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||||
|
{E313D2F7-6515-4B8E-8F81-7E886E866853}.Release|ARM64.Build.0 = Release|Any CPU
|
||||||
|
{E313D2F7-6515-4B8E-8F81-7E886E866853}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{E313D2F7-6515-4B8E-8F81-7E886E866853}.Release|x64.Build.0 = Release|x64
|
||||||
|
{E313D2F7-6515-4B8E-8F81-7E886E866853}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{E313D2F7-6515-4B8E-8F81-7E886E866853}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{A970D11A-AD9F-4A3F-A509-16FA5F9AC779}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{A970D11A-AD9F-4A3F-A509-16FA5F9AC779}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{A970D11A-AD9F-4A3F-A509-16FA5F9AC779}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||||
|
{A970D11A-AD9F-4A3F-A509-16FA5F9AC779}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||||
|
{A970D11A-AD9F-4A3F-A509-16FA5F9AC779}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||||
|
{A970D11A-AD9F-4A3F-A509-16FA5F9AC779}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||||
|
{A970D11A-AD9F-4A3F-A509-16FA5F9AC779}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{A970D11A-AD9F-4A3F-A509-16FA5F9AC779}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{A970D11A-AD9F-4A3F-A509-16FA5F9AC779}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{A970D11A-AD9F-4A3F-A509-16FA5F9AC779}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{A970D11A-AD9F-4A3F-A509-16FA5F9AC779}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{A970D11A-AD9F-4A3F-A509-16FA5F9AC779}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{A970D11A-AD9F-4A3F-A509-16FA5F9AC779}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||||
|
{A970D11A-AD9F-4A3F-A509-16FA5F9AC779}.Release|ARM.Build.0 = Release|Any CPU
|
||||||
|
{A970D11A-AD9F-4A3F-A509-16FA5F9AC779}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||||
|
{A970D11A-AD9F-4A3F-A509-16FA5F9AC779}.Release|ARM64.Build.0 = Release|Any CPU
|
||||||
|
{A970D11A-AD9F-4A3F-A509-16FA5F9AC779}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{A970D11A-AD9F-4A3F-A509-16FA5F9AC779}.Release|x64.Build.0 = Release|x64
|
||||||
|
{A970D11A-AD9F-4A3F-A509-16FA5F9AC779}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{A970D11A-AD9F-4A3F-A509-16FA5F9AC779}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{4FBDACA8-7A79-40E4-A20D-30139A37C680}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{4FBDACA8-7A79-40E4-A20D-30139A37C680}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{4FBDACA8-7A79-40E4-A20D-30139A37C680}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||||
|
{4FBDACA8-7A79-40E4-A20D-30139A37C680}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||||
|
{4FBDACA8-7A79-40E4-A20D-30139A37C680}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||||
|
{4FBDACA8-7A79-40E4-A20D-30139A37C680}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||||
|
{4FBDACA8-7A79-40E4-A20D-30139A37C680}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{4FBDACA8-7A79-40E4-A20D-30139A37C680}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{4FBDACA8-7A79-40E4-A20D-30139A37C680}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{4FBDACA8-7A79-40E4-A20D-30139A37C680}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{4FBDACA8-7A79-40E4-A20D-30139A37C680}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{4FBDACA8-7A79-40E4-A20D-30139A37C680}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{4FBDACA8-7A79-40E4-A20D-30139A37C680}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||||
|
{4FBDACA8-7A79-40E4-A20D-30139A37C680}.Release|ARM.Build.0 = Release|Any CPU
|
||||||
|
{4FBDACA8-7A79-40E4-A20D-30139A37C680}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||||
|
{4FBDACA8-7A79-40E4-A20D-30139A37C680}.Release|ARM64.Build.0 = Release|Any CPU
|
||||||
|
{4FBDACA8-7A79-40E4-A20D-30139A37C680}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{4FBDACA8-7A79-40E4-A20D-30139A37C680}.Release|x64.Build.0 = Release|x64
|
||||||
|
{4FBDACA8-7A79-40E4-A20D-30139A37C680}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{4FBDACA8-7A79-40E4-A20D-30139A37C680}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{0AB1D328-BBB0-434B-965A-48ACDB6CBFB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{0AB1D328-BBB0-434B-965A-48ACDB6CBFB7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{0AB1D328-BBB0-434B-965A-48ACDB6CBFB7}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||||
|
{0AB1D328-BBB0-434B-965A-48ACDB6CBFB7}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||||
|
{0AB1D328-BBB0-434B-965A-48ACDB6CBFB7}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||||
|
{0AB1D328-BBB0-434B-965A-48ACDB6CBFB7}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||||
|
{0AB1D328-BBB0-434B-965A-48ACDB6CBFB7}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{0AB1D328-BBB0-434B-965A-48ACDB6CBFB7}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{0AB1D328-BBB0-434B-965A-48ACDB6CBFB7}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{0AB1D328-BBB0-434B-965A-48ACDB6CBFB7}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{0AB1D328-BBB0-434B-965A-48ACDB6CBFB7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{0AB1D328-BBB0-434B-965A-48ACDB6CBFB7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{0AB1D328-BBB0-434B-965A-48ACDB6CBFB7}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||||
|
{0AB1D328-BBB0-434B-965A-48ACDB6CBFB7}.Release|ARM.Build.0 = Release|Any CPU
|
||||||
|
{0AB1D328-BBB0-434B-965A-48ACDB6CBFB7}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||||
|
{0AB1D328-BBB0-434B-965A-48ACDB6CBFB7}.Release|ARM64.Build.0 = Release|Any CPU
|
||||||
|
{0AB1D328-BBB0-434B-965A-48ACDB6CBFB7}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{0AB1D328-BBB0-434B-965A-48ACDB6CBFB7}.Release|x64.Build.0 = Release|x64
|
||||||
|
{0AB1D328-BBB0-434B-965A-48ACDB6CBFB7}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{0AB1D328-BBB0-434B-965A-48ACDB6CBFB7}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Debug|Any CPU.ActiveCfg = Debug|x86
|
||||||
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Debug|ARM.ActiveCfg = Debug|ARM
|
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||||
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Debug|ARM.Build.0 = Debug|ARM
|
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Debug|ARM.Build.0 = Debug|ARM
|
||||||
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Debug|ARM.Deploy.0 = Debug|ARM
|
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Debug|ARM.Deploy.0 = Debug|ARM
|
||||||
@@ -81,86 +162,26 @@ Global
|
|||||||
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Release|x86.ActiveCfg = Release|x86
|
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Release|x86.ActiveCfg = Release|x86
|
||||||
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Release|x86.Build.0 = Release|x86
|
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Release|x86.Build.0 = Release|x86
|
||||||
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Release|x86.Deploy.0 = Release|x86
|
{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}.Release|x86.Deploy.0 = Release|x86
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{DB86CC51-8AA1-46A4-B382-B05DE08E0FF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{DB86CC51-8AA1-46A4-B382-B05DE08E0FF6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
{DB86CC51-8AA1-46A4-B382-B05DE08E0FF6}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Debug|ARM.Build.0 = Debug|Any CPU
|
{DB86CC51-8AA1-46A4-B382-B05DE08E0FF6}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
{DB86CC51-8AA1-46A4-B382-B05DE08E0FF6}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Debug|ARM64.Build.0 = Debug|Any CPU
|
{DB86CC51-8AA1-46A4-B382-B05DE08E0FF6}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Debug|x64.ActiveCfg = Debug|x64
|
{DB86CC51-8AA1-46A4-B382-B05DE08E0FF6}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Debug|x64.Build.0 = Debug|x64
|
{DB86CC51-8AA1-46A4-B382-B05DE08E0FF6}.Debug|x64.Build.0 = Debug|x64
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
{DB86CC51-8AA1-46A4-B382-B05DE08E0FF6}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Debug|x86.Build.0 = Debug|Any CPU
|
{DB86CC51-8AA1-46A4-B382-B05DE08E0FF6}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{DB86CC51-8AA1-46A4-B382-B05DE08E0FF6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Release|Any CPU.Build.0 = Release|Any CPU
|
{DB86CC51-8AA1-46A4-B382-B05DE08E0FF6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Release|ARM.ActiveCfg = Release|Any CPU
|
{DB86CC51-8AA1-46A4-B382-B05DE08E0FF6}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Release|ARM.Build.0 = Release|Any CPU
|
{DB86CC51-8AA1-46A4-B382-B05DE08E0FF6}.Release|ARM.Build.0 = Release|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Release|ARM64.ActiveCfg = Release|Any CPU
|
{DB86CC51-8AA1-46A4-B382-B05DE08E0FF6}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Release|ARM64.Build.0 = Release|Any CPU
|
{DB86CC51-8AA1-46A4-B382-B05DE08E0FF6}.Release|ARM64.Build.0 = Release|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Release|x64.ActiveCfg = Release|x64
|
{DB86CC51-8AA1-46A4-B382-B05DE08E0FF6}.Release|x64.ActiveCfg = Release|x64
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Release|x64.Build.0 = Release|x64
|
{DB86CC51-8AA1-46A4-B382-B05DE08E0FF6}.Release|x64.Build.0 = Release|x64
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Release|x86.ActiveCfg = Release|Any CPU
|
{DB86CC51-8AA1-46A4-B382-B05DE08E0FF6}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{95F851E4-87A5-4BB7-953E-C0FE3B306F0E}.Release|x86.Build.0 = Release|Any CPU
|
{DB86CC51-8AA1-46A4-B382-B05DE08E0FF6}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Debug|ARM.Build.0 = Debug|Any CPU
|
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Debug|ARM64.Build.0 = Debug|Any CPU
|
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Debug|x86.Build.0 = Debug|Any CPU
|
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Release|ARM.ActiveCfg = Release|Any CPU
|
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Release|ARM.Build.0 = Release|Any CPU
|
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Release|ARM64.ActiveCfg = Release|Any CPU
|
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Release|ARM64.Build.0 = Release|Any CPU
|
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Release|x64.Build.0 = Release|x64
|
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Release|x86.ActiveCfg = Release|Any CPU
|
|
||||||
{49BCC188-22D2-468B-89EA-99C810BE790E}.Release|x86.Build.0 = Release|Any CPU
|
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Debug|ARM.Build.0 = Debug|Any CPU
|
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Debug|ARM64.Build.0 = Debug|Any CPU
|
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Debug|x86.ActiveCfg = Debug|Any CPU
|
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Debug|x86.Build.0 = Debug|Any CPU
|
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Release|ARM.ActiveCfg = Release|Any CPU
|
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Release|ARM.Build.0 = Release|Any CPU
|
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Release|ARM64.ActiveCfg = Release|Any CPU
|
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Release|ARM64.Build.0 = Release|Any CPU
|
|
||||||
{094A2030-C430-490B-AB26-205385A0D4BF}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{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
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
<xamlhost:XamlApplication
|
|
||||||
x:Class="NotificationFlyoutSample.App"
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:xamlhost="using:Microsoft.Toolkit.Win32.UI.XamlHost">
|
|
||||||
<xamlhost:XamlApplication.Resources>
|
|
||||||
<XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls" />
|
|
||||||
</xamlhost:XamlApplication.Resources>
|
|
||||||
</xamlhost:XamlApplication>
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
using Microsoft.Toolkit.Win32.UI.XamlHost;
|
|
||||||
|
|
||||||
namespace NotificationFlyoutSample
|
|
||||||
{
|
|
||||||
public sealed partial class App : XamlApplication
|
|
||||||
{
|
|
||||||
public App()
|
|
||||||
{
|
|
||||||
Initialize();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.1 KiB |
@@ -1,192 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
|
||||||
<PropertyGroup>
|
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
|
||||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
|
||||||
<ProjectGuid>{2057ADE0-C61E-45EE-BB7E-A469FE4D4C41}</ProjectGuid>
|
|
||||||
<OutputType>AppContainerExe</OutputType>
|
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
|
||||||
<RootNamespace>NotificationFlyoutSample</RootNamespace>
|
|
||||||
<AssemblyName>NotificationFlyoutSample</AssemblyName>
|
|
||||||
<DefaultLanguage>en-US</DefaultLanguage>
|
|
||||||
<TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
|
|
||||||
<TargetPlatformVersion Condition=" '$(TargetPlatformVersion)' == '' ">10.0.19041.0</TargetPlatformVersion>
|
|
||||||
<TargetPlatformMinVersion>10.0.19041.0</TargetPlatformMinVersion>
|
|
||||||
<MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>
|
|
||||||
<FileAlignment>512</FileAlignment>
|
|
||||||
<ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
|
||||||
<WindowsXamlEnableOverview>true</WindowsXamlEnableOverview>
|
|
||||||
<AppxPackageSigningEnabled>false</AppxPackageSigningEnabled>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<OutputPath>bin\x86\Debug\</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
|
||||||
<NoWarn>;2008</NoWarn>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<Prefer32Bit>true</Prefer32Bit>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
|
||||||
<OutputPath>bin\x86\Release\</OutputPath>
|
|
||||||
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<NoWarn>;2008</NoWarn>
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<Prefer32Bit>true</Prefer32Bit>
|
|
||||||
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<OutputPath>bin\ARM\Debug\</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
|
||||||
<NoWarn>;2008</NoWarn>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<PlatformTarget>ARM</PlatformTarget>
|
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<Prefer32Bit>true</Prefer32Bit>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'">
|
|
||||||
<OutputPath>bin\ARM\Release\</OutputPath>
|
|
||||||
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<NoWarn>;2008</NoWarn>
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<PlatformTarget>ARM</PlatformTarget>
|
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<Prefer32Bit>true</Prefer32Bit>
|
|
||||||
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM64'">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<OutputPath>bin\ARM64\Debug\</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
|
||||||
<NoWarn>;2008</NoWarn>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<PlatformTarget>ARM64</PlatformTarget>
|
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<Prefer32Bit>true</Prefer32Bit>
|
|
||||||
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM64'">
|
|
||||||
<OutputPath>bin\ARM64\Release\</OutputPath>
|
|
||||||
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<NoWarn>;2008</NoWarn>
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<PlatformTarget>ARM64</PlatformTarget>
|
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<Prefer32Bit>true</Prefer32Bit>
|
|
||||||
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<OutputPath>bin\x64\Debug\</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
|
||||||
<NoWarn>;2008</NoWarn>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<Prefer32Bit>true</Prefer32Bit>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
|
||||||
<OutputPath>bin\x64\Release\</OutputPath>
|
|
||||||
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<NoWarn>;2008</NoWarn>
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<Prefer32Bit>true</Prefer32Bit>
|
|
||||||
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup>
|
|
||||||
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Compile Include="App.xaml.cs">
|
|
||||||
<DependentUpon>App.xaml</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
|
||||||
<Compile Include="Shell.xaml.cs">
|
|
||||||
<DependentUpon>Shell.xaml</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<AppxManifest Include="Package.appxmanifest">
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
</AppxManifest>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Content Include="Assets\Icon-Light.ico" />
|
|
||||||
<Content Include="Assets\Icon.ico" />
|
|
||||||
<Content Include="Properties\Default.rd.xml" />
|
|
||||||
<Content Include="Assets\LockScreenLogo.scale-200.png" />
|
|
||||||
<Content Include="Assets\SplashScreen.scale-200.png" />
|
|
||||||
<Content Include="Assets\Square150x150Logo.scale-200.png" />
|
|
||||||
<Content Include="Assets\Square44x44Logo.scale-200.png" />
|
|
||||||
<Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
|
|
||||||
<Content Include="Assets\StoreLogo.png" />
|
|
||||||
<Content Include="Assets\Wide310x150Logo.scale-200.png" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ApplicationDefinition Include="App.xaml">
|
|
||||||
<Generator>MSBuild:Compile</Generator>
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
</ApplicationDefinition>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform">
|
|
||||||
<Version>6.2.11</Version>
|
|
||||||
</PackageReference>
|
|
||||||
<PackageReference Include="Microsoft.Toolkit.Win32.UI.XamlApplication">
|
|
||||||
<Version>6.1.2</Version>
|
|
||||||
</PackageReference>
|
|
||||||
<PackageReference Include="Microsoft.UI.Xaml">
|
|
||||||
<Version>2.6.0-prerelease.210113001</Version>
|
|
||||||
</PackageReference>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Page Include="Shell.xaml">
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
<Generator>MSBuild:Compile</Generator>
|
|
||||||
</Page>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\..\..\src\NotificationFlyout.Uwp.UI.Controls\NotificationFlyout.Uwp.UI.Controls.csproj">
|
|
||||||
<Project>{95f851e4-87a5-4bb7-953e-c0fe3b306f0e}</Project>
|
|
||||||
<Name>NotificationFlyout.Uwp.UI.Controls</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
<ProjectReference Include="..\..\..\src\NotificationFlyout.Uwp.UI\NotificationFlyout.Uwp.UI.csproj">
|
|
||||||
<Project>{ade190a2-f751-4836-b8f4-bf56694a4b3f}</Project>
|
|
||||||
<Name>NotificationFlyout.Uwp.UI</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
|
|
||||||
<VisualStudioVersion>14.0</VisualStudioVersion>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
|
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
|
||||||
<Target Name="BeforeBuild">
|
|
||||||
</Target>
|
|
||||||
<Target Name="AfterBuild">
|
|
||||||
</Target>
|
|
||||||
-->
|
|
||||||
<PropertyGroup>
|
|
||||||
<EnableTypeInfoReflection>false</EnableTypeInfoReflection>
|
|
||||||
<EnableXBindDiagnostics>false</EnableXBindDiagnostics>
|
|
||||||
</PropertyGroup>
|
|
||||||
</Project>
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
|
|
||||||
<Package
|
|
||||||
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
|
|
||||||
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
|
|
||||||
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
|
|
||||||
IgnorableNamespaces="uap mp">
|
|
||||||
|
|
||||||
<Identity
|
|
||||||
Name="463d679e-a359-426e-9d28-ecf319559f65"
|
|
||||||
Publisher="CN=dan"
|
|
||||||
Version="1.0.0.0" />
|
|
||||||
|
|
||||||
<mp:PhoneIdentity PhoneProductId="463d679e-a359-426e-9d28-ecf319559f65" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
|
|
||||||
|
|
||||||
<Properties>
|
|
||||||
<DisplayName>NotificationFlyoutSample</DisplayName>
|
|
||||||
<PublisherDisplayName>dan</PublisherDisplayName>
|
|
||||||
<Logo>Assets\StoreLogo.png</Logo>
|
|
||||||
</Properties>
|
|
||||||
|
|
||||||
<Dependencies>
|
|
||||||
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
|
|
||||||
</Dependencies>
|
|
||||||
|
|
||||||
<Resources>
|
|
||||||
<Resource Language="x-generate"/>
|
|
||||||
</Resources>
|
|
||||||
|
|
||||||
<Applications>
|
|
||||||
<Application Id="App"
|
|
||||||
Executable="$targetnametoken$.exe"
|
|
||||||
EntryPoint="NotificationFlyoutSample.App">
|
|
||||||
<uap:VisualElements
|
|
||||||
DisplayName="NotificationFlyoutSample"
|
|
||||||
Square150x150Logo="Assets\Square150x150Logo.png"
|
|
||||||
Square44x44Logo="Assets\Square44x44Logo.png"
|
|
||||||
Description="NotificationFlyoutSample"
|
|
||||||
BackgroundColor="transparent">
|
|
||||||
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png"/>
|
|
||||||
<uap:SplashScreen Image="Assets\SplashScreen.png" />
|
|
||||||
</uap:VisualElements>
|
|
||||||
</Application>
|
|
||||||
</Applications>
|
|
||||||
|
|
||||||
<Capabilities>
|
|
||||||
<Capability Name="internetClient" />
|
|
||||||
</Capabilities>
|
|
||||||
</Package>
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
using System.Reflection;
|
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
|
||||||
// set of attributes. Change these attribute values to modify the information
|
|
||||||
// associated with an assembly.
|
|
||||||
[assembly: AssemblyTitle("NotificationFlyoutSample")]
|
|
||||||
[assembly: AssemblyDescription("")]
|
|
||||||
[assembly: AssemblyConfiguration("")]
|
|
||||||
[assembly: AssemblyCompany("")]
|
|
||||||
[assembly: AssemblyProduct("NotificationFlyoutSample")]
|
|
||||||
[assembly: AssemblyCopyright("Copyright © 2021")]
|
|
||||||
[assembly: AssemblyTrademark("")]
|
|
||||||
[assembly: AssemblyCulture("")]
|
|
||||||
|
|
||||||
// Version information for an assembly consists of the following four values:
|
|
||||||
//
|
|
||||||
// Major Version
|
|
||||||
// Minor Version
|
|
||||||
// Build Number
|
|
||||||
// Revision
|
|
||||||
//
|
|
||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
|
||||||
// by using the '*' as shown below:
|
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
|
||||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
||||||
[assembly: ComVisible(false)]
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
<!--
|
|
||||||
This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most
|
|
||||||
developers. However, you can modify these parameters to modify the behavior of the .NET Native
|
|
||||||
optimizer.
|
|
||||||
|
|
||||||
Runtime Directives are documented at https://go.microsoft.com/fwlink/?LinkID=391919
|
|
||||||
|
|
||||||
To fully enable reflection for App1.MyClass and all of its public/private members
|
|
||||||
<Type Name="App1.MyClass" Dynamic="Required All"/>
|
|
||||||
|
|
||||||
To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32
|
|
||||||
<TypeInstantiation Name="App1.AppClass" Arguments="System.Int32" Activate="Required Public" />
|
|
||||||
|
|
||||||
Using the Namespace directive to apply reflection policy to all the types in a particular namespace
|
|
||||||
<Namespace Name="DataClasses.ViewModels" Serialize="All" />
|
|
||||||
-->
|
|
||||||
|
|
||||||
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
|
|
||||||
<Application>
|
|
||||||
<!--
|
|
||||||
An Assembly element with Name="*Application*" applies to all assemblies in
|
|
||||||
the application package. The asterisks are not wildcards.
|
|
||||||
-->
|
|
||||||
<Assembly Name="*Application*" Dynamic="Required All" />
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Add your application specific runtime directives here. -->
|
|
||||||
|
|
||||||
|
|
||||||
</Application>
|
|
||||||
</Directives>
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
<controls:NotificationFlyout
|
|
||||||
x:Class="NotificationFlyoutSample.Shell"
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:controls="using:NotificationFlyout.Uwp.UI.Controls"
|
|
||||||
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
|
|
||||||
IconSource="/Assets/Icon.ico"
|
|
||||||
LightIconSource="/Assets/Icon-Light.ico">
|
|
||||||
<controls:NotificationFlyout.ContextMenuItems>
|
|
||||||
<MenuFlyoutItem Click="MenuFlyoutItem_Click" Text="Click me" />
|
|
||||||
<MenuFlyoutItem Click="MenuFlyoutItem_Click_1" Text="Exit" />
|
|
||||||
</controls:NotificationFlyout.ContextMenuItems>
|
|
||||||
<StackPanel Margin="24">
|
|
||||||
<ComboBox
|
|
||||||
x:Name="Theme"
|
|
||||||
Margin="0,0,0,8"
|
|
||||||
SelectionChanged="Theme_SelectionChanged">
|
|
||||||
<ComboBoxItem Content="Default" />
|
|
||||||
<ComboBoxItem Content="Dark" />
|
|
||||||
<ComboBoxItem Content="Light" />
|
|
||||||
</ComboBox>
|
|
||||||
<muxc:MenuBar>
|
|
||||||
<muxc:MenuBarItem Title="File">
|
|
||||||
<MenuFlyoutItem Text="New" />
|
|
||||||
<MenuFlyoutItem Text="Open..." />
|
|
||||||
<MenuFlyoutItem Text="Save" />
|
|
||||||
<MenuFlyoutItem Text="Exit" />
|
|
||||||
</muxc:MenuBarItem>
|
|
||||||
|
|
||||||
<muxc:MenuBarItem Title="Edit">
|
|
||||||
<MenuFlyoutItem Text="Undo" />
|
|
||||||
<MenuFlyoutItem Text="Cut" />
|
|
||||||
<MenuFlyoutItem Text="Copy" />
|
|
||||||
<MenuFlyoutItem Text="Paste" />
|
|
||||||
</muxc:MenuBarItem>
|
|
||||||
|
|
||||||
<muxc:MenuBarItem Title="Help">
|
|
||||||
<MenuFlyoutItem Text="About" />
|
|
||||||
</muxc:MenuBarItem>
|
|
||||||
</muxc:MenuBar>
|
|
||||||
<muxc:ProgressRing Margin="0,0,0,8" IsActive="True" />
|
|
||||||
<muxc:ProgressBar
|
|
||||||
Width="130"
|
|
||||||
Margin="0,0,0,8"
|
|
||||||
IsIndeterminate="True"
|
|
||||||
ShowError="False"
|
|
||||||
ShowPaused="False" />
|
|
||||||
<Button Margin="0,0,0,8" Content="Button" />
|
|
||||||
<Slider Margin="0,0,0,8" />
|
|
||||||
<TextBox Margin="0,0,0,8" />
|
|
||||||
<CalendarView Margin="0,0,0,8" />
|
|
||||||
<TimePicker Margin="0,0,0,8" />
|
|
||||||
<DatePicker />
|
|
||||||
<muxc:NumberBox
|
|
||||||
x:Name="NumberBoxSpinButtonPlacementExample"
|
|
||||||
Header="Enter an integer:"
|
|
||||||
LargeChange="100"
|
|
||||||
SmallChange="10"
|
|
||||||
SpinButtonPlacementMode="Compact"
|
|
||||||
Value="1" />
|
|
||||||
<muxc:RadioButtons Header="Options:">
|
|
||||||
<RadioButton Content="Option 1" />
|
|
||||||
<RadioButton Content="Option 2" />
|
|
||||||
<RadioButton Content="Option 3" />
|
|
||||||
</muxc:RadioButtons>
|
|
||||||
<StackPanel>
|
|
||||||
<CheckBox
|
|
||||||
x:Name="OptionsAllCheckBox"
|
|
||||||
Content="Select all"
|
|
||||||
IsThreeState="True" />
|
|
||||||
<CheckBox
|
|
||||||
x:Name="Option1CheckBox"
|
|
||||||
Margin="24,0,0,0"
|
|
||||||
Content="Option 1" />
|
|
||||||
<CheckBox
|
|
||||||
x:Name="Option2CheckBox"
|
|
||||||
Margin="24,0,0,0"
|
|
||||||
Content="Option 2"
|
|
||||||
IsChecked="True" />
|
|
||||||
<CheckBox
|
|
||||||
x:Name="Option3CheckBox"
|
|
||||||
Margin="24,0,0,0"
|
|
||||||
Content="Option 3" />
|
|
||||||
</StackPanel>
|
|
||||||
<muxc:RatingControl AutomationProperties.Name="RatingControl with placeholder" PlaceholderValue="0" />
|
|
||||||
</StackPanel>
|
|
||||||
</controls:NotificationFlyout>
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
using Windows.UI.Popups;
|
|
||||||
using Windows.UI.Xaml;
|
|
||||||
|
|
||||||
namespace NotificationFlyoutSample
|
|
||||||
{
|
|
||||||
public sealed partial class Shell
|
|
||||||
{
|
|
||||||
public Shell()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Theme_SelectionChanged(object sender, Windows.UI.Xaml.Controls.SelectionChangedEventArgs e)
|
|
||||||
{
|
|
||||||
switch (Theme.SelectedIndex)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
RequestedTheme = Windows.UI.Xaml.ElementTheme.Default;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
RequestedTheme = Windows.UI.Xaml.ElementTheme.Dark;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
RequestedTheme = Windows.UI.Xaml.ElementTheme.Light;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void MenuFlyoutItem_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
MessageDialog d = new MessageDialog("Hello from context menu!");
|
|
||||||
d.ShowAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void MenuFlyoutItem_Click_1(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
var app = GetApplication();
|
|
||||||
app.Exit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
// General Information about an assembly is controlled through the following
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
Runtime Directives are documented at https://go.microsoft.com/fwlink/?LinkID=391919
|
Runtime Directives are documented at https://go.microsoft.com/fwlink/?LinkID=391919
|
||||||
|
|
||||||
To fully enable reflection for App1.MyClass and all of its public/private members
|
To fully enable reflection for App1.MyClass and all of its public/private members
|
||||||
<Type Name="App1.MyClass" Dynamic="Required All"/>
|
<Type Name="App1.MyClass" Dynamic="Required All" />
|
||||||
|
|
||||||
To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32
|
To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32
|
||||||
<TypeInstantiation Name="App1.AppClass" Arguments="System.Int32" Activate="Required Public" />
|
<TypeInstantiation Name="App1.AppClass" Arguments="System.Int32" Activate="Required Public" />
|
||||||
@@ -23,9 +23,6 @@
|
|||||||
-->
|
-->
|
||||||
<Assembly Name="*Application*" Dynamic="Required All" />
|
<Assembly Name="*Application*" Dynamic="Required All" />
|
||||||
|
|
||||||
|
|
||||||
<!-- Add your application specific runtime directives here. -->
|
<!-- Add your application specific runtime directives here. -->
|
||||||
|
|
||||||
|
|
||||||
</Application>
|
</Application>
|
||||||
</Directives>
|
</Directives>
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
<controls:NotificationFlyout
|
||||||
|
x:Class="NotificationFlyoutSample.SampleFlyout"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:controls="using:TheXamlGuy.NotificationFlyout.Uwp.UI.Controls"
|
||||||
|
VerticalContentAlignment="Top">
|
||||||
|
<controls:NotificationFlyout.ContextFlyout>
|
||||||
|
<MenuFlyout>
|
||||||
|
<MenuFlyoutItem Click="OnCloseMenuFlyoutItemClick" Text="Close" />
|
||||||
|
</MenuFlyout>
|
||||||
|
</controls:NotificationFlyout.ContextFlyout>
|
||||||
|
<Grid Margin="24" VerticalAlignment="Top">
|
||||||
|
<StackPanel Background="Red">
|
||||||
|
<ToggleSwitch
|
||||||
|
Header="Is light dimissed enabled"
|
||||||
|
IsOn="True"
|
||||||
|
OffContent="False"
|
||||||
|
OnContent="True"
|
||||||
|
Toggled="ToggleSwitch_Toggled" />
|
||||||
|
<ComboBox Header="Placement" SelectionChanged="ComboBox_SelectionChanged">
|
||||||
|
<ComboBoxItem Content="Auto" />
|
||||||
|
<ComboBoxItem Content="FullRight" />
|
||||||
|
</ComboBox>
|
||||||
|
<Slider />
|
||||||
|
<TextBox />
|
||||||
|
<CalendarDatePicker />
|
||||||
|
<CalendarView />
|
||||||
|
<Button Click="Button_Click" Content="hello" />
|
||||||
|
<TimePicker />
|
||||||
|
</StackPanel>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
</controls:NotificationFlyout>
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
using TheXamlGuy.NotificationFlyout.Uwp.UI.Controls;
|
||||||
|
using Windows.UI.Xaml;
|
||||||
|
using Windows.UI.Xaml.Controls;
|
||||||
|
|
||||||
|
namespace NotificationFlyoutSample
|
||||||
|
{
|
||||||
|
public sealed partial class SampleFlyout
|
||||||
|
{
|
||||||
|
public SampleFlyout()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnCloseMenuFlyoutItemClick(object sender, RoutedEventArgs args)
|
||||||
|
{
|
||||||
|
var app = GetApplication();
|
||||||
|
app.Exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ToggleSwitch_Toggled(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var toggleSwitch = sender as ToggleSwitch;
|
||||||
|
if (toggleSwitch.IsOn)
|
||||||
|
{
|
||||||
|
this.IsLightDismissEnabled = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.IsLightDismissEnabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||||
|
{
|
||||||
|
var comboBox = sender as ComboBox;
|
||||||
|
|
||||||
|
if (comboBox.SelectedIndex == 0)
|
||||||
|
{
|
||||||
|
this.Placement = NotificationFlyoutPlacement.Auto;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.Placement = NotificationFlyoutPlacement.FullRight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Button_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var app = GetApplication();
|
||||||
|
app.OpenAsWindow<Test>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
<controls:NotificationFlyout
|
|
||||||
x:Class="NotificationFlyoutSample.Shell"
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:controls="using:NotificationFlyout.Uwp.UI.Controls"
|
|
||||||
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
|
|
||||||
IconSource="/Assets/Icon.ico"
|
|
||||||
LightIconSource="/Assets/Icon-Light.ico">
|
|
||||||
<controls:NotificationFlyout.ContextMenuItems>
|
|
||||||
<MenuFlyoutItem Click="MenuFlyoutItem_Click" Text="Close" />
|
|
||||||
</controls:NotificationFlyout.ContextMenuItems>
|
|
||||||
<StackPanel Margin="24">
|
|
||||||
<ComboBox
|
|
||||||
x:Name="Theme"
|
|
||||||
Margin="0,0,0,8"
|
|
||||||
SelectionChanged="Theme_SelectionChanged">
|
|
||||||
<ComboBoxItem Content="Default" />
|
|
||||||
<ComboBoxItem Content="Dark" />
|
|
||||||
<ComboBoxItem Content="Light" />
|
|
||||||
</ComboBox>
|
|
||||||
<muxc:MenuBar>
|
|
||||||
<muxc:MenuBarItem Title="File">
|
|
||||||
<MenuFlyoutItem Text="New" />
|
|
||||||
<MenuFlyoutItem Text="Open..." />
|
|
||||||
<MenuFlyoutItem Text="Save" />
|
|
||||||
<MenuFlyoutItem Text="Exit" />
|
|
||||||
</muxc:MenuBarItem>
|
|
||||||
|
|
||||||
<muxc:MenuBarItem Title="Edit">
|
|
||||||
<MenuFlyoutItem Text="Undo" />
|
|
||||||
<MenuFlyoutItem Text="Cut" />
|
|
||||||
<MenuFlyoutItem Text="Copy" />
|
|
||||||
<MenuFlyoutItem Text="Paste" />
|
|
||||||
</muxc:MenuBarItem>
|
|
||||||
|
|
||||||
<muxc:MenuBarItem Title="Help">
|
|
||||||
<MenuFlyoutItem Text="About" />
|
|
||||||
</muxc:MenuBarItem>
|
|
||||||
</muxc:MenuBar>
|
|
||||||
<muxc:ProgressRing Margin="0,0,0,8" IsActive="True" />
|
|
||||||
<muxc:ProgressBar
|
|
||||||
Width="130"
|
|
||||||
Margin="0,0,0,8"
|
|
||||||
IsIndeterminate="True"
|
|
||||||
ShowError="False"
|
|
||||||
ShowPaused="False" />
|
|
||||||
<Button Margin="0,0,0,8" Content="Open window" Click="Button_Click" />
|
|
||||||
<Slider Margin="0,0,0,8" />
|
|
||||||
<TextBox Margin="0,0,0,8" />
|
|
||||||
<CalendarView Margin="0,0,0,8" />
|
|
||||||
<TimePicker Margin="0,0,0,8" />
|
|
||||||
<DatePicker />
|
|
||||||
<muxc:NumberBox
|
|
||||||
x:Name="NumberBoxSpinButtonPlacementExample"
|
|
||||||
Header="Enter an integer:"
|
|
||||||
LargeChange="100"
|
|
||||||
SmallChange="10"
|
|
||||||
SpinButtonPlacementMode="Compact"
|
|
||||||
Value="1" />
|
|
||||||
<muxc:RadioButtons Header="Options:">
|
|
||||||
<RadioButton Content="Option 1" />
|
|
||||||
<RadioButton Content="Option 2" />
|
|
||||||
<RadioButton Content="Option 3" />
|
|
||||||
</muxc:RadioButtons>
|
|
||||||
<StackPanel>
|
|
||||||
<CheckBox
|
|
||||||
x:Name="OptionsAllCheckBox"
|
|
||||||
Content="Select all"
|
|
||||||
IsThreeState="True" />
|
|
||||||
<CheckBox
|
|
||||||
x:Name="Option1CheckBox"
|
|
||||||
Margin="24,0,0,0"
|
|
||||||
Content="Option 1" />
|
|
||||||
<CheckBox
|
|
||||||
x:Name="Option2CheckBox"
|
|
||||||
Margin="24,0,0,0"
|
|
||||||
Content="Option 2"
|
|
||||||
IsChecked="True" />
|
|
||||||
<CheckBox
|
|
||||||
x:Name="Option3CheckBox"
|
|
||||||
Margin="24,0,0,0"
|
|
||||||
Content="Option 3" />
|
|
||||||
</StackPanel>
|
|
||||||
<muxc:RatingControl AutomationProperties.Name="RatingControl with placeholder" PlaceholderValue="0" />
|
|
||||||
</StackPanel>
|
|
||||||
</controls:NotificationFlyout>
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
namespace NotificationFlyoutSample
|
|
||||||
{
|
|
||||||
public sealed partial class Shell
|
|
||||||
{
|
|
||||||
public Shell()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Theme_SelectionChanged(object sender, Windows.UI.Xaml.Controls.SelectionChangedEventArgs e)
|
|
||||||
{
|
|
||||||
switch (Theme.SelectedIndex)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
RequestedTheme = Windows.UI.Xaml.ElementTheme.Default;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
RequestedTheme = Windows.UI.Xaml.ElementTheme.Dark;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
RequestedTheme = Windows.UI.Xaml.ElementTheme.Light;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void MenuFlyoutItem_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
var app = GetApplication();
|
|
||||||
app.Exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Button_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
var app = GetApplication();
|
|
||||||
app.OpenAsWindow<WindowContent>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
<UserControl
|
||||||
|
x:Class="NotificationFlyoutSample.Test"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:local="using:NotificationFlyoutSample"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
|
||||||
|
d:DesignHeight="300"
|
||||||
|
d:DesignWidth="400"
|
||||||
|
mc:Ignorable="d">
|
||||||
|
|
||||||
|
|
||||||
|
<Grid>
|
||||||
|
<Button Click="TestButtonClick1" Content="Show TeachingTip" />
|
||||||
|
|
||||||
|
<muxc:TeachingTip x:Name="ToggleThemeTeachingTip1" ShouldConstrainToRootBounds="False">
|
||||||
|
<muxc:TeachingTip.Content>
|
||||||
|
<Border Width="500" Height="500">
|
||||||
|
<Slider />
|
||||||
|
|
||||||
|
</Border>
|
||||||
|
</muxc:TeachingTip.Content>
|
||||||
|
</muxc:TeachingTip>
|
||||||
|
</Grid>
|
||||||
|
</UserControl>
|
||||||
@@ -17,11 +17,17 @@ using Windows.UI.Xaml.Navigation;
|
|||||||
|
|
||||||
namespace NotificationFlyoutSample
|
namespace NotificationFlyoutSample
|
||||||
{
|
{
|
||||||
public sealed partial class WindowContent : UserControl
|
public sealed partial class Test : UserControl
|
||||||
{
|
{
|
||||||
public WindowContent()
|
public Test()
|
||||||
{
|
{
|
||||||
this.InitializeComponent();
|
this.InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void TestButtonClick1(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
ToggleThemeTeachingTip1.XamlRoot = this.XamlRoot;
|
||||||
|
ToggleThemeTeachingTip1.IsOpen = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
<UserControl
|
|
||||||
x:Class="NotificationFlyoutSample.WindowContent"
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:muxc="using:Microsoft.UI.Xaml.Controls">
|
|
||||||
<muxc:NavigationView x:Name="nvSample">
|
|
||||||
<muxc:NavigationView.MenuItems>
|
|
||||||
<muxc:NavigationViewItem
|
|
||||||
Content="Menu Item1"
|
|
||||||
Icon="Play"
|
|
||||||
Tag="SamplePage1" />
|
|
||||||
<muxc:NavigationViewItem
|
|
||||||
Content="Menu Item2"
|
|
||||||
Icon="Save"
|
|
||||||
Tag="SamplePage2" />
|
|
||||||
<muxc:NavigationViewItem
|
|
||||||
Content="Menu Item3"
|
|
||||||
Icon="Refresh"
|
|
||||||
Tag="SamplePage3" />
|
|
||||||
<muxc:NavigationViewItem
|
|
||||||
Content="Menu Item4"
|
|
||||||
Icon="Download"
|
|
||||||
Tag="SamplePage4" />
|
|
||||||
</muxc:NavigationView.MenuItems>
|
|
||||||
<Frame x:Name="contentFrame" />
|
|
||||||
</muxc:NavigationView>
|
|
||||||
</UserControl>
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using Windows.UI.Xaml.Controls;
|
|
||||||
using Windows.UI.Xaml.Controls.Primitives;
|
|
||||||
|
|
||||||
namespace NotificationFlyout.Uwp.UI.Controls
|
|
||||||
{
|
|
||||||
internal class ContextMenuFlyoutHost : Control
|
|
||||||
{
|
|
||||||
private MenuFlyout _flyout;
|
|
||||||
private Grid _root;
|
|
||||||
|
|
||||||
public ContextMenuFlyoutHost()
|
|
||||||
{
|
|
||||||
DefaultStyleKey = typeof(ContextMenuFlyoutHost);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void HideFlyout()
|
|
||||||
{
|
|
||||||
if (_flyout == null) return;
|
|
||||||
_flyout.Hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ShowFlyout()
|
|
||||||
{
|
|
||||||
if (_root == null) return;
|
|
||||||
if (_flyout == null) return;
|
|
||||||
|
|
||||||
_flyout.ShowAt(_root, new FlyoutShowOptions { Placement = FlyoutPlacementMode.BottomEdgeAlignedLeft, ShowMode = FlyoutShowMode.TransientWithDismissOnPointerMoveAway });
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnApplyTemplate()
|
|
||||||
{
|
|
||||||
_root = GetTemplateChild("Root") as Grid;
|
|
||||||
_flyout = GetTemplateChild("Flyout") as MenuFlyout;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal void SetMenuItems(IList<MenuFlyoutItemBase> addedItems, IList<MenuFlyoutItemBase> removedItems = null)
|
|
||||||
{
|
|
||||||
if (_flyout == null) return;
|
|
||||||
|
|
||||||
if (removedItems != null)
|
|
||||||
{
|
|
||||||
foreach (var item in removedItems)
|
|
||||||
{
|
|
||||||
_flyout.Items.Remove(item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var item in addedItems)
|
|
||||||
{
|
|
||||||
_flyout.Items.Add(item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
<ResourceDictionary
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:controls="using:NotificationFlyout.Uwp.UI.Controls">
|
|
||||||
<Style TargetType="controls:ContextMenuFlyoutHost">
|
|
||||||
<Setter Property="Template">
|
|
||||||
<Setter.Value>
|
|
||||||
<ControlTemplate TargetType="controls:ContextMenuFlyoutHost">
|
|
||||||
<Grid x:Name="Root">
|
|
||||||
<FlyoutBase.AttachedFlyout>
|
|
||||||
<MenuFlyout x:Name="Flyout" />
|
|
||||||
</FlyoutBase.AttachedFlyout>
|
|
||||||
</Grid>
|
|
||||||
</ControlTemplate>
|
|
||||||
</Setter.Value>
|
|
||||||
</Setter>
|
|
||||||
</Style>
|
|
||||||
</ResourceDictionary>
|
|
||||||
@@ -1,150 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.ObjectModel;
|
|
||||||
using System.Collections.Specialized;
|
|
||||||
using System.Linq;
|
|
||||||
using Windows.UI.Xaml;
|
|
||||||
using Windows.UI.Xaml.Controls;
|
|
||||||
using Windows.UI.Xaml.Markup;
|
|
||||||
using Windows.UI.Xaml.Media;
|
|
||||||
|
|
||||||
namespace NotificationFlyout.Uwp.UI.Controls
|
|
||||||
{
|
|
||||||
[ContentProperty(Name = "Content")]
|
|
||||||
public class NotificationFlyout : DependencyObject
|
|
||||||
{
|
|
||||||
public static readonly DependencyProperty IconSourceProperty =
|
|
||||||
DependencyProperty.Register(nameof(IconSource),
|
|
||||||
typeof(ImageSource), typeof(NotificationFlyout),
|
|
||||||
new PropertyMetadata(null, OnIconPropertyChanged));
|
|
||||||
|
|
||||||
public static readonly DependencyProperty LightIconSourceProperty =
|
|
||||||
DependencyProperty.Register(nameof(LightIconSource),
|
|
||||||
typeof(ImageSource), typeof(NotificationFlyout),
|
|
||||||
new PropertyMetadata(null, OnIconPropertyChanged));
|
|
||||||
|
|
||||||
public static readonly DependencyProperty RequestedThemeProperty =
|
|
||||||
DependencyProperty.Register(nameof(RequestedTheme),
|
|
||||||
typeof(ElementTheme), typeof(NotificationFlyout),
|
|
||||||
new PropertyMetadata(ElementTheme.Default, OnRequestedThemePropertyChanged));
|
|
||||||
|
|
||||||
public static INotificationFlyoutApplication _applicationInstance;
|
|
||||||
|
|
||||||
public static DependencyProperty ContentProperty =
|
|
||||||
DependencyProperty.Register(nameof(Content),
|
|
||||||
typeof(UIElement), typeof(NotificationFlyout),
|
|
||||||
new PropertyMetadata(null, OnContentPropertyChanged));
|
|
||||||
|
|
||||||
public static DependencyProperty ContextMenuItemsProperty =
|
|
||||||
DependencyProperty.Register(nameof(ContextMenuItems),
|
|
||||||
typeof(IList<MenuFlyoutItemBase>), typeof(NotificationFlyout),
|
|
||||||
new PropertyMetadata(null));
|
|
||||||
public NotificationFlyout()
|
|
||||||
{
|
|
||||||
ContextMenuItems = new ObservableCollection<MenuFlyoutItemBase>();
|
|
||||||
(ContextMenuItems as INotifyCollectionChanged).CollectionChanged += OnContextMenuItemsChanged;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal event EventHandler ContentChanged;
|
|
||||||
|
|
||||||
internal event EventHandler IconSourceChanged;
|
|
||||||
|
|
||||||
internal event EventHandler<NotificationFlyoutMenuItemsChangedEventArgs> MenuItemsChanged;
|
|
||||||
|
|
||||||
internal event EventHandler RequestedThemeChanged;
|
|
||||||
|
|
||||||
public UIElement Content
|
|
||||||
{
|
|
||||||
get => (UIElement)GetValue(ContentProperty);
|
|
||||||
set => SetValue(ContentProperty, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public IList<MenuFlyoutItemBase> ContextMenuItems
|
|
||||||
{
|
|
||||||
get => (IList<MenuFlyoutItemBase>)GetValue(ContextMenuItemsProperty);
|
|
||||||
set => SetValue(ContextMenuItemsProperty, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ImageSource IconSource
|
|
||||||
{
|
|
||||||
get => (ImageSource)GetValue(IconSourceProperty);
|
|
||||||
set => SetValue(IconSourceProperty, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ImageSource LightIconSource
|
|
||||||
{
|
|
||||||
get => (ImageSource)GetValue(LightIconSourceProperty);
|
|
||||||
set => SetValue(LightIconSourceProperty, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ElementTheme RequestedTheme
|
|
||||||
{
|
|
||||||
get => (ElementTheme)GetValue(RequestedThemeProperty);
|
|
||||||
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;
|
|
||||||
sender?.OnContentPropertyChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void OnIconPropertyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs args)
|
|
||||||
{
|
|
||||||
var sender = dependencyObject as NotificationFlyout;
|
|
||||||
sender?.OnIconPropertyChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void OnRequestedThemePropertyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs args)
|
|
||||||
{
|
|
||||||
var sender = dependencyObject as NotificationFlyout;
|
|
||||||
sender?.OnRequestedThemePropertyChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnContentPropertyChanged()
|
|
||||||
{
|
|
||||||
ContentChanged?.Invoke(this, EventArgs.Empty);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnContextMenuItemsChanged(object sender, NotifyCollectionChangedEventArgs args)
|
|
||||||
{
|
|
||||||
var addedItems = args.NewItems.Cast<MenuFlyoutItemBase>().ToList();
|
|
||||||
var removedItems = args.NewItems.Cast<MenuFlyoutItemBase>().ToList();
|
|
||||||
|
|
||||||
MenuItemsChanged?.Invoke(this, new NotificationFlyoutMenuItemsChangedEventArgs(addedItems, removedItems));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnIconPropertyChanged()
|
|
||||||
{
|
|
||||||
IconSourceChanged?.Invoke(this, EventArgs.Empty);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnRequestedThemePropertyChanged()
|
|
||||||
{
|
|
||||||
RequestedThemeChanged?.Invoke(this, EventArgs.Empty);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal class NotificationFlyoutMenuItemsChangedEventArgs : EventArgs
|
|
||||||
{
|
|
||||||
public NotificationFlyoutMenuItemsChangedEventArgs(IList<MenuFlyoutItemBase> addedItems, IList<MenuFlyoutItemBase> removedItems)
|
|
||||||
{
|
|
||||||
AddedItems = addedItems;
|
|
||||||
RemovedItems = removedItems;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IList<MenuFlyoutItemBase> AddedItems { get; private set; }
|
|
||||||
|
|
||||||
public IList<MenuFlyoutItemBase> RemovedItems { get; private set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
using System.Numerics;
|
|
||||||
using Windows.UI.Xaml;
|
|
||||||
using Windows.UI.Xaml.Controls;
|
|
||||||
using Windows.UI.Xaml.Controls.Primitives;
|
|
||||||
using Windows.UI.Xaml.Media;
|
|
||||||
|
|
||||||
namespace NotificationFlyout.Uwp.UI.Controls
|
|
||||||
{
|
|
||||||
internal class NotificationFlyoutHost : Control
|
|
||||||
{
|
|
||||||
public static readonly DependencyProperty ContentProperty =
|
|
||||||
DependencyProperty.Register(nameof(Content),
|
|
||||||
typeof(UIElement), typeof(NotificationFlyoutHost),
|
|
||||||
new PropertyMetadata(null));
|
|
||||||
|
|
||||||
private bool _isLoaded;
|
|
||||||
private string _placement;
|
|
||||||
private Grid _root;
|
|
||||||
|
|
||||||
public NotificationFlyoutHost()
|
|
||||||
{
|
|
||||||
DefaultStyleKey = typeof(NotificationFlyoutHost);
|
|
||||||
}
|
|
||||||
|
|
||||||
public UIElement Content
|
|
||||||
{
|
|
||||||
get => (UIElement)GetValue(ContentProperty);
|
|
||||||
set => SetValue(ContentProperty, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void HideFlyout()
|
|
||||||
{
|
|
||||||
if (_root == null) return;
|
|
||||||
FlyoutBase flyout = FlyoutBase.GetAttachedFlyout(_root);
|
|
||||||
flyout.Hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetFlyoutPlacement(string placement)
|
|
||||||
{
|
|
||||||
if (!_isLoaded)
|
|
||||||
{
|
|
||||||
_placement = placement;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(placement)) return;
|
|
||||||
VisualStateManager.GoToState(this, placement, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ShowFlyout(FlyoutPlacementMode placementMode)
|
|
||||||
{
|
|
||||||
if (_root == null) return;
|
|
||||||
var flyout = FlyoutBase.GetAttachedFlyout(_root);
|
|
||||||
flyout.ShowAt(_root, new FlyoutShowOptions
|
|
||||||
{
|
|
||||||
Placement = placementMode,
|
|
||||||
ShowMode = FlyoutShowMode.Standard,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnApplyTemplate()
|
|
||||||
{
|
|
||||||
_root = GetTemplateChild("Root") as Grid;
|
|
||||||
if (GetTemplateChild("ContentRoot") is Grid contentRoot)
|
|
||||||
{
|
|
||||||
contentRoot.Shadow = new ThemeShadow();
|
|
||||||
|
|
||||||
var currentTranslation = contentRoot.Translation;
|
|
||||||
var translation = new Vector3(currentTranslation.X, currentTranslation.Y, 16.0f);
|
|
||||||
contentRoot.Translation = translation;
|
|
||||||
}
|
|
||||||
|
|
||||||
_isLoaded = true;
|
|
||||||
SetFlyoutPlacement(_placement);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,98 +0,0 @@
|
|||||||
<ResourceDictionary
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:controls="using:NotificationFlyout.Uwp.UI.Controls">
|
|
||||||
<Style TargetType="controls:NotificationFlyoutHost">
|
|
||||||
<Setter Property="Template">
|
|
||||||
<Setter.Value>
|
|
||||||
<ControlTemplate TargetType="controls:NotificationFlyoutHost">
|
|
||||||
<Grid x:Name="Root">
|
|
||||||
<Grid.Resources>
|
|
||||||
<Style x:Key="DefaultFlyoutPresenterStyle" TargetType="FlyoutPresenter">
|
|
||||||
<Setter Property="BorderThickness" Value="0" />
|
|
||||||
<Setter Property="Background" Value="Transparent" />
|
|
||||||
<Setter Property="IsDefaultShadowEnabled" Value="False" />
|
|
||||||
<Setter Property="Padding" Value="0" />
|
|
||||||
</Style>
|
|
||||||
<Style
|
|
||||||
x:Key="TopFlyoutPresenterStyle"
|
|
||||||
BasedOn="{StaticResource DefaultFlyoutPresenterStyle}"
|
|
||||||
TargetType="FlyoutPresenter">
|
|
||||||
<Setter Property="Margin" Value="0,-7,0,0" />
|
|
||||||
</Style>
|
|
||||||
<Style
|
|
||||||
x:Key="BottomFlyoutPresenterStyle"
|
|
||||||
BasedOn="{StaticResource DefaultFlyoutPresenterStyle}"
|
|
||||||
TargetType="FlyoutPresenter">
|
|
||||||
<Setter Property="Margin" Value="0,7,0,0" />
|
|
||||||
</Style>
|
|
||||||
<Style
|
|
||||||
x:Key="LeftFlyoutPresenterStyle"
|
|
||||||
BasedOn="{StaticResource DefaultFlyoutPresenterStyle}"
|
|
||||||
TargetType="FlyoutPresenter">
|
|
||||||
<Setter Property="Margin" Value="-7,0,0,0" />
|
|
||||||
</Style>
|
|
||||||
<Style
|
|
||||||
x:Key="RightFlyoutPresenterStyle"
|
|
||||||
BasedOn="{StaticResource DefaultFlyoutPresenterStyle}"
|
|
||||||
TargetType="FlyoutPresenter">
|
|
||||||
<Setter Property="Margin" Value="7,0,0,0" />
|
|
||||||
</Style>
|
|
||||||
</Grid.Resources>
|
|
||||||
<FlyoutBase.AttachedFlyout>
|
|
||||||
<Flyout
|
|
||||||
x:Name="Flyout"
|
|
||||||
AreOpenCloseAnimationsEnabled="False"
|
|
||||||
FlyoutPresenterStyle="{StaticResource BottomFlyoutPresenterStyle}"
|
|
||||||
ShouldConstrainToRootBounds="False">
|
|
||||||
<Grid x:Name="ContentRoot">
|
|
||||||
<Grid.Transitions>
|
|
||||||
<TransitionCollection>
|
|
||||||
<EntranceThemeTransition
|
|
||||||
x:Name="EntranceThemeTransition"
|
|
||||||
FromHorizontalOffset="0"
|
|
||||||
FromVerticalOffset="0" />
|
|
||||||
</TransitionCollection>
|
|
||||||
</Grid.Transitions>
|
|
||||||
<controls:NotificationFlyoutPresenter Content="{TemplateBinding Content}" />
|
|
||||||
</Grid>
|
|
||||||
</Flyout>
|
|
||||||
</FlyoutBase.AttachedFlyout>
|
|
||||||
<VisualStateManager.VisualStateGroups>
|
|
||||||
<VisualStateGroup x:Name="PlacementStates">
|
|
||||||
<VisualState x:Name="Bottom">
|
|
||||||
<VisualState.Setters>
|
|
||||||
<Setter Target="Flyout.FlyoutPresenterStyle" Value="{StaticResource BottomFlyoutPresenterStyle}" />
|
|
||||||
<Setter Target="EntranceThemeTransition.FromHorizontalOffset" Value="0" />
|
|
||||||
<Setter Target="EntranceThemeTransition.FromVerticalOffset" Value="80" />
|
|
||||||
</VisualState.Setters>
|
|
||||||
</VisualState>
|
|
||||||
<VisualState x:Name="Top">
|
|
||||||
<VisualState.Setters>
|
|
||||||
<Setter Target="Flyout.FlyoutPresenterStyle" Value="{StaticResource TopFlyoutPresenterStyle}" />
|
|
||||||
<Setter Target="EntranceThemeTransition.FromHorizontalOffset" Value="0" />
|
|
||||||
<Setter Target="EntranceThemeTransition.FromVerticalOffset" Value="-80" />
|
|
||||||
</VisualState.Setters>
|
|
||||||
</VisualState>
|
|
||||||
<VisualState x:Name="Left">
|
|
||||||
<VisualState.Setters>
|
|
||||||
<Setter Target="Flyout.FlyoutPresenterStyle" Value="{StaticResource LeftFlyoutPresenterStyle}" />
|
|
||||||
<Setter Target="EntranceThemeTransition.FromHorizontalOffset" Value="-80" />
|
|
||||||
<Setter Target="EntranceThemeTransition.FromVerticalOffset" Value="0" />
|
|
||||||
</VisualState.Setters>
|
|
||||||
</VisualState>
|
|
||||||
<VisualState x:Name="Right">
|
|
||||||
<VisualState.Setters>
|
|
||||||
<Setter Target="Flyout.FlyoutPresenterStyle" Value="{StaticResource RightFlyoutPresenterStyle}" />
|
|
||||||
<Setter Target="EntranceThemeTransition.FromHorizontalOffset" Value="80" />
|
|
||||||
<Setter Target="EntranceThemeTransition.FromVerticalOffset" Value="0" />
|
|
||||||
</VisualState.Setters>
|
|
||||||
</VisualState>
|
|
||||||
</VisualStateGroup>
|
|
||||||
</VisualStateManager.VisualStateGroups>
|
|
||||||
</Grid>
|
|
||||||
</ControlTemplate>
|
|
||||||
</Setter.Value>
|
|
||||||
</Setter>
|
|
||||||
</Style>
|
|
||||||
</ResourceDictionary>
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
using Windows.UI.Xaml.Controls;
|
|
||||||
|
|
||||||
namespace NotificationFlyout.Uwp.UI.Controls
|
|
||||||
{
|
|
||||||
public class NotificationFlyoutPresenter : ContentControl
|
|
||||||
{
|
|
||||||
public NotificationFlyoutPresenter()
|
|
||||||
{
|
|
||||||
DefaultStyleKey = typeof(NotificationFlyoutPresenter);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
<ResourceDictionary
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:controls="using:NotificationFlyout.Uwp.UI.Controls">
|
|
||||||
<ResourceDictionary.ThemeDictionaries>
|
|
||||||
<ResourceDictionary x:Key="Default">
|
|
||||||
<AcrylicBrush
|
|
||||||
x:Key="AcrylicBackgroundFillColorBrush"
|
|
||||||
BackgroundSource="HostBackdrop"
|
|
||||||
FallbackColor="#2C2C2C"
|
|
||||||
TintColor="#2C2C2C"
|
|
||||||
TintOpacity="0.8" />
|
|
||||||
<StaticResource x:Key="NotificationFlyoutPresenterBackgroundBrush" ResourceKey="AcrylicBackgroundFillColorBrush" />
|
|
||||||
</ResourceDictionary>
|
|
||||||
<ResourceDictionary x:Key="Light">
|
|
||||||
<AcrylicBrush
|
|
||||||
x:Key="AcrylicBackgroundFillColorBrush"
|
|
||||||
BackgroundSource="HostBackdrop"
|
|
||||||
FallbackColor="#F9F9F9"
|
|
||||||
TintColor="#FCFCFC"
|
|
||||||
TintOpacity="0.8" />
|
|
||||||
<StaticResource x:Key="NotificationFlyoutPresenterBackgroundBrush" ResourceKey="AcrylicBackgroundFillColorBrush" />
|
|
||||||
</ResourceDictionary>
|
|
||||||
<ResourceDictionary x:Key="HighContrast">
|
|
||||||
<SolidColorBrush x:Key="NotificationFlyoutPresenterBackgroundBrush" Color="Green" />
|
|
||||||
</ResourceDictionary>
|
|
||||||
</ResourceDictionary.ThemeDictionaries>
|
|
||||||
<AcrylicBrush
|
|
||||||
x:Key="NotificationFlyoutPresenterBackgroundAccentBrush"
|
|
||||||
BackgroundSource="HostBackdrop"
|
|
||||||
FallbackColor="{StaticResource SystemAccentColorDark1}"
|
|
||||||
TintColor="{StaticResource SystemAccentColorDark1}"
|
|
||||||
TintOpacity="0.8" />
|
|
||||||
<Style TargetType="controls:NotificationFlyoutPresenter">
|
|
||||||
<Setter Property="Background" Value="{ThemeResource NotificationFlyoutPresenterBackgroundBrush}" />
|
|
||||||
<Setter Property="Template">
|
|
||||||
<Setter.Value>
|
|
||||||
<ControlTemplate TargetType="controls:NotificationFlyoutPresenter">
|
|
||||||
<Border
|
|
||||||
x:Name="Root"
|
|
||||||
Padding="{TemplateBinding Padding}"
|
|
||||||
Background="{TemplateBinding Background}"
|
|
||||||
BackgroundSizing="OuterBorderEdge"
|
|
||||||
BorderBrush="{TemplateBinding BorderBrush}"
|
|
||||||
BorderThickness="{TemplateBinding BorderThickness}"
|
|
||||||
CornerRadius="{TemplateBinding CornerRadius}">
|
|
||||||
<ScrollViewer
|
|
||||||
x:Name="ScrollViewer"
|
|
||||||
AutomationProperties.AccessibilityView="Raw"
|
|
||||||
HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
|
|
||||||
HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}"
|
|
||||||
VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}"
|
|
||||||
VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}"
|
|
||||||
ZoomMode="{TemplateBinding ScrollViewer.ZoomMode}">
|
|
||||||
<ContentControl
|
|
||||||
x:Name="ContentPresenter"
|
|
||||||
Margin="{TemplateBinding Padding}"
|
|
||||||
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
|
|
||||||
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
|
|
||||||
Content="{TemplateBinding Content}"
|
|
||||||
ContentTemplate="{TemplateBinding ContentTemplate}"
|
|
||||||
ContentTransitions="{TemplateBinding ContentTransitions}" />
|
|
||||||
</ScrollViewer>
|
|
||||||
<VisualStateManager.VisualStateGroups>
|
|
||||||
<VisualStateGroup x:Name="ThemeStates">
|
|
||||||
<VisualState x:Name="DefaultTheme" />
|
|
||||||
<VisualState x:Name="ColorPrevalenceTheme">
|
|
||||||
<VisualState.Setters>
|
|
||||||
<Setter Target="Root.Background" Value="{ThemeResource NotificationFlyoutPresenterBackgroundAccentBrush}" />
|
|
||||||
</VisualState.Setters>
|
|
||||||
</VisualState>
|
|
||||||
</VisualStateGroup>
|
|
||||||
</VisualStateManager.VisualStateGroups>
|
|
||||||
</Border>
|
|
||||||
</ControlTemplate>
|
|
||||||
</Setter.Value>
|
|
||||||
</Setter>
|
|
||||||
</Style>
|
|
||||||
</ResourceDictionary>
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
|
||||||
<ResourceDictionary.MergedDictionaries>
|
|
||||||
<ResourceDictionary Source="ms-appx:///NotificationFlyout.Uwp.UI.Controls/NotificationFlyout/NotificationFlyoutHost.xaml" />
|
|
||||||
<ResourceDictionary Source="ms-appx:///NotificationFlyout.Uwp.UI.Controls/NotificationFlyout/NotificationFlyoutPresenter.xaml" />
|
|
||||||
<ResourceDictionary Source="ms-appx:///NotificationFlyout.Uwp.UI.Controls/NotificationFlyout/ContextMenuFlyoutHost.xaml" />
|
|
||||||
</ResourceDictionary.MergedDictionaries>
|
|
||||||
</ResourceDictionary>
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
GetSystemMetricsForDpi
|
|
||||||
GetCurrentPackageFullName
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
<Project Sdk="MSBuild.Sdk.Extras">
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<TargetFrameworks>uap10.0.19041</TargetFrameworks>
|
|
||||||
<Platforms>AnyCPU;x64</Platforms>
|
|
||||||
<EnableTypeInfoReflection>false</EnableTypeInfoReflection>
|
|
||||||
<EnableXBindDiagnostics>false</EnableXBindDiagnostics>
|
|
||||||
<LangVersion>9.0</LangVersion>
|
|
||||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
|
||||||
<Company>TheXamlGuy</Company>
|
|
||||||
<Authors>TheXamlGuy</Authors>
|
|
||||||
<Product>NotificationFlyout</Product>
|
|
||||||
<Version>1.0.0</Version>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Compile Remove="NotificationFlyout\**" />
|
|
||||||
<EmbeddedResource Remove="NotificationFlyout\**" />
|
|
||||||
<None Remove="NotificationFlyout\**" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<None Remove="NativeMethods.txt" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<AdditionalFiles Include="NativeMethods.txt" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="Microsoft.Windows.CsWin32" Version="0.1.319-beta">
|
|
||||||
<PrivateAssets>all</PrivateAssets>
|
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
|
||||||
</PackageReference>
|
|
||||||
<PackageReference Include="System.Drawing.Common" Version="5.0.0" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
<Project Sdk="MSBuild.Sdk.Extras">
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
|
||||||
<UseWPF>true</UseWPF>
|
|
||||||
<AssetTargetFallback>uap10.0.19041</AssetTargetFallback>
|
|
||||||
<Platforms>AnyCPU;x64</Platforms>
|
|
||||||
<MSBuildWarningsAsMessages>NU1702</MSBuildWarningsAsMessages>
|
|
||||||
<Company>TheXamlGuy</Company>
|
|
||||||
<Authors>TheXamlGuy</Authors>
|
|
||||||
<Product>NotificationFlyout</Product>
|
|
||||||
<Version>1.0.0</Version>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="Microsoft.Toolkit.Wpf.UI.XamlHost" Version="6.1.2" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\NotificationFlyout.Uwp.UI.Controls\NotificationFlyout.Uwp.UI.Controls.csproj" />
|
|
||||||
<ProjectReference Include="..\NotificationFlyout.Uwp.UI\NotificationFlyout.Uwp.UI.csproj" />
|
|
||||||
<ProjectReference Include="..\NotificationFlyout.Wpf.UI\NotificationFlyout.Wpf.UI.csproj" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Update="Microsoft.VCRTForwarders.140" Version="1.0.7" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
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, 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();
|
|
||||||
|
|
||||||
_contextMenuXamlHost = new ContextMenuXamlHost();
|
|
||||||
_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();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void OpenAsWindow<TUIElement>() where TUIElement : Windows.UI.Xaml.UIElement
|
|
||||||
{
|
|
||||||
var window = new XamlHost<TUIElement>();
|
|
||||||
window.Show();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ShowFlyout()
|
|
||||||
{
|
|
||||||
_notificationFlyoutXamlHost.ShowFlyout();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void OnFlyoutPropertyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
|
|
||||||
{
|
|
||||||
var sender = dependencyObject as NotificationFlyoutApplication;
|
|
||||||
sender?.OnFlyoutPropertyChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnContextMenuRequested(object sender, EventArgs args)
|
|
||||||
{
|
|
||||||
_contextMenuXamlHost?.ShowContextMenuFlyout();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnFlyoutPropertyChanged()
|
|
||||||
{
|
|
||||||
_notificationFlyoutXamlHost?.SetFlyout(Flyout);
|
|
||||||
_contextMenuXamlHost?.SetFlyout(Flyout);
|
|
||||||
|
|
||||||
Uwp.UI.Controls.NotificationFlyout.SetApplication(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,78 +0,0 @@
|
|||||||
using NotificationFlyout.Uwp.UI.Controls;
|
|
||||||
using NotificationFlyout.Wpf.UI.Extensions;
|
|
||||||
using NotificationFlyout.Wpf.UI.Helpers;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Windows.UI.Xaml.Controls;
|
|
||||||
|
|
||||||
namespace NotificationFlyout.Wpf.UI.Controls
|
|
||||||
{
|
|
||||||
internal class ContextMenuXamlHost : TransparentXamlHost<ContextMenuFlyoutHost>
|
|
||||||
{
|
|
||||||
private Uwp.UI.Controls.NotificationFlyout _flyout;
|
|
||||||
|
|
||||||
public ContextMenuXamlHost()
|
|
||||||
{
|
|
||||||
Topmost = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetFlyout(Uwp.UI.Controls.NotificationFlyout flyout)
|
|
||||||
{
|
|
||||||
if (_flyout != null)
|
|
||||||
{
|
|
||||||
_flyout.MenuItemsChanged -= OnContextMenuItemsChanged;
|
|
||||||
}
|
|
||||||
|
|
||||||
_flyout = flyout;
|
|
||||||
UpdateMenuItems();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ShowContextMenuFlyout()
|
|
||||||
{
|
|
||||||
var position = CursorHelper.GetPhysicalCursorPos();
|
|
||||||
this.SetWindowPosition(position.y, position.x, WindowSize, WindowSize);
|
|
||||||
|
|
||||||
var flyoutHost = GetHostContent();
|
|
||||||
if (flyoutHost != null)
|
|
||||||
{
|
|
||||||
flyoutHost.ShowFlyout();
|
|
||||||
}
|
|
||||||
|
|
||||||
Activate();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnContentLoaded()
|
|
||||||
{
|
|
||||||
UpdateMenuItems();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnDeactivated(EventArgs args)
|
|
||||||
{
|
|
||||||
var flyoutHost = GetHostContent();
|
|
||||||
if (flyoutHost != null)
|
|
||||||
{
|
|
||||||
flyoutHost.HideFlyout();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnContextMenuItemsChanged(object sender, NotificationFlyoutMenuItemsChangedEventArgs args)
|
|
||||||
{
|
|
||||||
UpdateMenuItems(args.AddedItems, args.RemovedItems);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void UpdateMenuItems()
|
|
||||||
{
|
|
||||||
if (_flyout == null) return;
|
|
||||||
UpdateMenuItems(_flyout.ContextMenuItems);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void UpdateMenuItems(IList<MenuFlyoutItemBase> addedItems, IList<MenuFlyoutItemBase> removedItems = default)
|
|
||||||
{
|
|
||||||
var flyoutHost = GetHostContent();
|
|
||||||
if (flyoutHost != null)
|
|
||||||
{
|
|
||||||
flyoutHost.SetMenuItems(addedItems, removedItems);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,248 +0,0 @@
|
|||||||
using NotificationFlyout.Uwp.UI.Controls;
|
|
||||||
using NotificationFlyout.Uwp.UI.Extensions;
|
|
||||||
using NotificationFlyout.Wpf.UI.Extensions;
|
|
||||||
using NotificationFlyout.Wpf.UI.Helpers;
|
|
||||||
using System;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using Windows.UI.Xaml.Controls.Primitives;
|
|
||||||
|
|
||||||
namespace NotificationFlyout.Wpf.UI.Controls
|
|
||||||
{
|
|
||||||
internal class NotificationFlyoutXamlHost : TransparentXamlHost<NotificationFlyoutHost>
|
|
||||||
{
|
|
||||||
private const string ShellTrayHandleName = "Shell_TrayWnd";
|
|
||||||
|
|
||||||
private Uwp.UI.Controls.NotificationFlyout _flyout;
|
|
||||||
|
|
||||||
private NotificationIconHelper _notificationIconHelper;
|
|
||||||
private SystemPersonalisationHelper _systemPersonalisationHelper;
|
|
||||||
private TaskbarHelper _taskbarHelper;
|
|
||||||
|
|
||||||
internal event EventHandler ContextMenuRequested;
|
|
||||||
|
|
||||||
public void SetFlyout(Uwp.UI.Controls.NotificationFlyout flyout)
|
|
||||||
{
|
|
||||||
if (_flyout != null)
|
|
||||||
{
|
|
||||||
_flyout.ContentChanged -= OnFlyoutContentChanged;
|
|
||||||
_flyout.IconSourceChanged -= OnFlyoutIconSourceChanged;
|
|
||||||
_flyout.RequestedThemeChanged -= OnFlyoutIconSourceChanged;
|
|
||||||
}
|
|
||||||
|
|
||||||
_flyout = flyout;
|
|
||||||
_flyout.ContentChanged += OnFlyoutContentChanged;
|
|
||||||
_flyout.IconSourceChanged += OnFlyoutIconSourceChanged;
|
|
||||||
_flyout.RequestedThemeChanged += OnFlyoutRequestedThemeChanged;
|
|
||||||
|
|
||||||
UpdateIcons();
|
|
||||||
UpdateFlyoutContent();
|
|
||||||
UpdateRequestedTheme();
|
|
||||||
}
|
|
||||||
|
|
||||||
internal void HideFlyout()
|
|
||||||
{
|
|
||||||
var flyoutHost = GetHostContent();
|
|
||||||
if (flyoutHost != null)
|
|
||||||
{
|
|
||||||
flyoutHost.HideFlyout();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal void ShowFlyout()
|
|
||||||
{
|
|
||||||
var flyoutHost = GetHostContent();
|
|
||||||
if (flyoutHost != null)
|
|
||||||
{
|
|
||||||
var taskbarState = _taskbarHelper.GetCurrentState();
|
|
||||||
var flyoutPlacement = taskbarState.Position switch
|
|
||||||
{
|
|
||||||
TaskbarPosition.Left => FlyoutPlacementMode.Right,
|
|
||||||
TaskbarPosition.Top => FlyoutPlacementMode.Bottom,
|
|
||||||
TaskbarPosition.Right => FlyoutPlacementMode.Left,
|
|
||||||
TaskbarPosition.Bottom => FlyoutPlacementMode.Top,
|
|
||||||
_ => throw new ArgumentOutOfRangeException(),
|
|
||||||
};
|
|
||||||
|
|
||||||
Activate();
|
|
||||||
flyoutHost.ShowFlyout(flyoutPlacement);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnContentLoaded()
|
|
||||||
{
|
|
||||||
PrepareNotificationIcon();
|
|
||||||
PrepareTaskbar();
|
|
||||||
UpdateWindow();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnDeactivated(EventArgs args)
|
|
||||||
{
|
|
||||||
HideFlyout();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnFlyoutContentChanged(object sender, EventArgs args)
|
|
||||||
{
|
|
||||||
UpdateFlyoutContent();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnFlyoutIconSourceChanged(object sender, EventArgs args)
|
|
||||||
{
|
|
||||||
UpdateIcons();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnFlyoutRequestedThemeChanged(object sender, EventArgs args)
|
|
||||||
{
|
|
||||||
UpdateRequestedTheme();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnIconInvoked(object sender, NotificationIconInvokedEventArgs args)
|
|
||||||
{
|
|
||||||
if (args.MouseButton == MouseButton.Left)
|
|
||||||
{
|
|
||||||
ShowFlyout();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args.MouseButton == MouseButton.Right)
|
|
||||||
{
|
|
||||||
ContextMenuRequested?.Invoke(this, EventArgs.Empty);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnTaskbarChanged(object sender, EventArgs args)
|
|
||||||
{
|
|
||||||
UpdateWindow();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnThemeChanged(object sender, SystemPersonalisationChangedEventArgs args)
|
|
||||||
{
|
|
||||||
UpdateIcons();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void PrepareNotificationIcon()
|
|
||||||
{
|
|
||||||
_notificationIconHelper = NotificationIconHelper.Create(this);
|
|
||||||
_notificationIconHelper.IconInvoked += OnIconInvoked;
|
|
||||||
|
|
||||||
_systemPersonalisationHelper = SystemPersonalisationHelper.Create(this);
|
|
||||||
_systemPersonalisationHelper.ThemeChanged += OnThemeChanged;
|
|
||||||
|
|
||||||
UpdateIcons();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void PrepareTaskbar()
|
|
||||||
{
|
|
||||||
_taskbarHelper = TaskbarHelper.Create(this);
|
|
||||||
_taskbarHelper.TaskbarChanged += OnTaskbarChanged;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnClosed(EventArgs args)
|
|
||||||
{
|
|
||||||
_notificationIconHelper.Dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void UpdateFlyoutContent()
|
|
||||||
{
|
|
||||||
if (_flyout == null) return;
|
|
||||||
|
|
||||||
var content = _flyout.Content;
|
|
||||||
if (content == null) return;
|
|
||||||
|
|
||||||
var flyoutHost = GetHostContent();
|
|
||||||
if (flyoutHost != null)
|
|
||||||
{
|
|
||||||
flyoutHost.Content = content;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void UpdateIcons()
|
|
||||||
{
|
|
||||||
if (!IsLoaded) return;
|
|
||||||
|
|
||||||
if (_flyout == null) return;
|
|
||||||
|
|
||||||
var _defaultIconSource = _flyout.IconSource;
|
|
||||||
var _lightIconSource = _flyout.LightIconSource;
|
|
||||||
|
|
||||||
var shellTrayHandle = WindowHelper.GetHandle(ShellTrayHandleName);
|
|
||||||
if (shellTrayHandle == null) return;
|
|
||||||
|
|
||||||
var dpi = WindowHelper.GetDpi(shellTrayHandle);
|
|
||||||
|
|
||||||
var iconSource = _systemPersonalisationHelper.Theme == SystemTheme.Dark ? _defaultIconSource : _lightIconSource;
|
|
||||||
if (iconSource == null) return;
|
|
||||||
|
|
||||||
using var icon = await iconSource.ConvertToIconAsync(dpi);
|
|
||||||
_notificationIconHelper.SetIcon(icon.Handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void UpdateRequestedTheme()
|
|
||||||
{
|
|
||||||
if (_flyout == null) return;
|
|
||||||
|
|
||||||
var requestedTheme = _flyout.RequestedTheme;
|
|
||||||
|
|
||||||
var flyoutHost = GetHostContent();
|
|
||||||
if (flyoutHost != null)
|
|
||||||
{
|
|
||||||
flyoutHost.RequestedTheme = requestedTheme;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void UpdateWindow()
|
|
||||||
{
|
|
||||||
if (!IsLoaded) return;
|
|
||||||
|
|
||||||
var flyoutHost = GetHostContent();
|
|
||||||
if (flyoutHost == null) return;
|
|
||||||
|
|
||||||
var taskbarState = _taskbarHelper.GetCurrentState();
|
|
||||||
|
|
||||||
Left = taskbarState.Screen.WorkingArea.Left;
|
|
||||||
Top = taskbarState.Screen.WorkingArea.Top;
|
|
||||||
|
|
||||||
var windowWidth = WindowSize * this.DpiX();
|
|
||||||
var windowHeight = WindowSize * this.DpiY();
|
|
||||||
|
|
||||||
double top, left, height, width;
|
|
||||||
|
|
||||||
var taskbarRect = taskbarState.Rect;
|
|
||||||
switch (taskbarState.Position)
|
|
||||||
{
|
|
||||||
case TaskbarPosition.Left:
|
|
||||||
top = taskbarRect.Bottom - windowHeight;
|
|
||||||
left = taskbarRect.Right;
|
|
||||||
height = windowHeight;
|
|
||||||
width = windowWidth;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TaskbarPosition.Top:
|
|
||||||
top = taskbarRect.Bottom;
|
|
||||||
left = FlowDirection == FlowDirection.RightToLeft ? taskbarRect.Left : taskbarRect.Right - windowWidth;
|
|
||||||
height = windowHeight;
|
|
||||||
width = windowWidth;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TaskbarPosition.Right:
|
|
||||||
top = taskbarRect.Bottom - windowHeight;
|
|
||||||
left = taskbarRect.Left - windowWidth;
|
|
||||||
height = windowHeight;
|
|
||||||
width = windowWidth;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TaskbarPosition.Bottom:
|
|
||||||
top = taskbarRect.Top - windowHeight;
|
|
||||||
left = FlowDirection == FlowDirection.RightToLeft ? taskbarRect.Left : taskbarRect.Right - windowWidth;
|
|
||||||
height = windowHeight;
|
|
||||||
width = windowWidth;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
throw new ArgumentOutOfRangeException();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.SetWindowPosition(top, left, height, width);
|
|
||||||
flyoutHost.SetFlyoutPlacement(taskbarState.Position.ToString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
using NotificationFlyout.Wpf.UI.Helpers;
|
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace NotificationFlyout.Wpf.UI.Extensions
|
|
||||||
{
|
|
||||||
public static class OperatingSystemExtensions
|
|
||||||
{
|
|
||||||
public static bool IsGreaterThan(this OperatingSystem operatingSystem, OperatingSystemVersion version)
|
|
||||||
{
|
|
||||||
return operatingSystem.Version.Build > (int)version;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,200 +0,0 @@
|
|||||||
using NotificationFlyout.Wpf.UI.Extensions;
|
|
||||||
using System;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using System.Windows.Interop;
|
|
||||||
|
|
||||||
namespace NotificationFlyout.Wpf.UI.Helpers
|
|
||||||
{
|
|
||||||
public class NotificationIconHelper : IDisposable
|
|
||||||
{
|
|
||||||
private const int CallbackMessage = 0x400;
|
|
||||||
private const uint IconVersion = 0x4;
|
|
||||||
|
|
||||||
private readonly object _lock = new();
|
|
||||||
private readonly IntPtr _windowHandle;
|
|
||||||
private bool _isDisposed;
|
|
||||||
private NotifyIconData _notifyIconData;
|
|
||||||
|
|
||||||
private NotificationIconHelper(Window window)
|
|
||||||
{
|
|
||||||
_windowHandle = window.GetHandle();
|
|
||||||
|
|
||||||
HwndSource source = HwndSource.FromHwnd(_windowHandle);
|
|
||||||
source.AddHook(new HwndSourceHook(WndProc));
|
|
||||||
|
|
||||||
CreateNotificationIcon();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
~NotificationIconHelper()
|
|
||||||
{
|
|
||||||
Dispose(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public event EventHandler<NotificationIconInvokedEventArgs> IconInvoked;
|
|
||||||
|
|
||||||
private enum NotifyIconBalloonType
|
|
||||||
{
|
|
||||||
None = 0x00,
|
|
||||||
Info = 0x01,
|
|
||||||
Warning = 0x02,
|
|
||||||
Error = 0x03,
|
|
||||||
User = 0x04,
|
|
||||||
NoSound = 0x10,
|
|
||||||
LargeIcon = 0x20,
|
|
||||||
RespectQuietTime = 0x80
|
|
||||||
}
|
|
||||||
|
|
||||||
private enum NotifyIconCommand : uint
|
|
||||||
{
|
|
||||||
Add = 0x0,
|
|
||||||
Delete = 0x2,
|
|
||||||
Modify = 0x1,
|
|
||||||
SetVersion = 0x4
|
|
||||||
}
|
|
||||||
|
|
||||||
[Flags]
|
|
||||||
private enum NotifyIconDataMember : uint
|
|
||||||
{
|
|
||||||
Message = 0x01,
|
|
||||||
Icon = 0x02,
|
|
||||||
Tip = 0x04,
|
|
||||||
State = 0x08,
|
|
||||||
Info = 0x10,
|
|
||||||
Realtime = 0x40,
|
|
||||||
UseLegacyToolTips = 0x80
|
|
||||||
}
|
|
||||||
|
|
||||||
private enum NotifyIconState : uint
|
|
||||||
{
|
|
||||||
Visible = 0x00,
|
|
||||||
Hidden = 0x01
|
|
||||||
}
|
|
||||||
|
|
||||||
public static NotificationIconHelper Create(Window window)
|
|
||||||
{
|
|
||||||
return new NotificationIconHelper(window);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Dispose()
|
|
||||||
{
|
|
||||||
Dispose(true);
|
|
||||||
GC.SuppressFinalize(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetIcon(IntPtr iconHandle)
|
|
||||||
{
|
|
||||||
lock (_lock)
|
|
||||||
{
|
|
||||||
_notifyIconData.IconHandle = iconHandle;
|
|
||||||
WriteNotifyIconData(NotifyIconCommand.Modify, NotifyIconDataMember.Icon);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[DllImport("user32.dll", SetLastError = true)]
|
|
||||||
private static extern IntPtr DefWindowProcW(IntPtr handle, uint msg, IntPtr wParam, IntPtr lParam);
|
|
||||||
|
|
||||||
[DllImport("shell32.dll", SetLastError = true)]
|
|
||||||
private static extern int Shell_NotifyIcon(NotifyIconCommand notifyCommand, ref NotifyIconData notifyIconData);
|
|
||||||
|
|
||||||
private void CreateNotificationIcon()
|
|
||||||
{
|
|
||||||
lock (_lock)
|
|
||||||
{
|
|
||||||
_notifyIconData = new NotifyIconData();
|
|
||||||
|
|
||||||
_notifyIconData.cbSize = (uint)Marshal.SizeOf(_notifyIconData);
|
|
||||||
_notifyIconData.WindowHandle = _windowHandle;
|
|
||||||
_notifyIconData.TaskbarIconId = 0x0;
|
|
||||||
_notifyIconData.CallbackMessageId = CallbackMessage;
|
|
||||||
_notifyIconData.VersionOrTimeout = IconVersion;
|
|
||||||
|
|
||||||
_notifyIconData.IconHandle = IntPtr.Zero;
|
|
||||||
|
|
||||||
_notifyIconData.IconState = NotifyIconState.Hidden;
|
|
||||||
_notifyIconData.StateMask = NotifyIconState.Hidden;
|
|
||||||
|
|
||||||
WriteNotifyIconData(NotifyIconCommand.Add, NotifyIconDataMember.Message | NotifyIconDataMember.Icon | NotifyIconDataMember.Tip);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Dispose(bool disposing)
|
|
||||||
{
|
|
||||||
if (_isDisposed || !disposing) return;
|
|
||||||
|
|
||||||
lock (_lock)
|
|
||||||
{
|
|
||||||
_isDisposed = true;
|
|
||||||
RemoveNotificationIcon();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void InvokeIconInvoked(MouseButton mouseButton)
|
|
||||||
{
|
|
||||||
IconInvoked?.Invoke(this, new NotificationIconInvokedEventArgs { MouseButton = mouseButton });
|
|
||||||
}
|
|
||||||
|
|
||||||
private void RemoveNotificationIcon() => WriteNotifyIconData(NotifyIconCommand.Delete, NotifyIconDataMember.Message);
|
|
||||||
|
|
||||||
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
|
|
||||||
{
|
|
||||||
if (msg == CallbackMessage)
|
|
||||||
{
|
|
||||||
switch ((uint)lParam)
|
|
||||||
{
|
|
||||||
case (uint)WndProcMessages.WM_LBUTTONUP:
|
|
||||||
InvokeIconInvoked(MouseButton.Left);
|
|
||||||
break;
|
|
||||||
case (uint)WndProcMessages.WM_MBUTTONUP:
|
|
||||||
InvokeIconInvoked(MouseButton.Middle);
|
|
||||||
break;
|
|
||||||
case (uint)WndProcMessages.WM_RBUTTONUP:
|
|
||||||
InvokeIconInvoked(MouseButton.Right);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return DefWindowProcW(hwnd, (uint)msg, wParam, (lParam));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void WriteNotifyIconData(NotifyIconCommand command, NotifyIconDataMember flags)
|
|
||||||
{
|
|
||||||
_notifyIconData.ValidMembers = flags;
|
|
||||||
lock (_lock)
|
|
||||||
{
|
|
||||||
Shell_NotifyIcon(command, ref _notifyIconData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
|
|
||||||
private struct NotifyIconData
|
|
||||||
{
|
|
||||||
public uint cbSize;
|
|
||||||
public IntPtr WindowHandle;
|
|
||||||
public uint TaskbarIconId;
|
|
||||||
public NotifyIconDataMember ValidMembers;
|
|
||||||
public uint CallbackMessageId;
|
|
||||||
public IntPtr IconHandle;
|
|
||||||
|
|
||||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
|
|
||||||
public string ToolTipText;
|
|
||||||
|
|
||||||
public NotifyIconState IconState;
|
|
||||||
public NotifyIconState StateMask;
|
|
||||||
|
|
||||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
|
|
||||||
public string BalloonText;
|
|
||||||
|
|
||||||
public uint VersionOrTimeout;
|
|
||||||
|
|
||||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
|
|
||||||
public string BalloonTitle;
|
|
||||||
|
|
||||||
public NotifyIconBalloonType BalloonFlags;
|
|
||||||
public Guid TaskbarIconGuid;
|
|
||||||
public IntPtr CustomBalloonIconHandle;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Windows.Input;
|
|
||||||
|
|
||||||
namespace NotificationFlyout.Wpf.UI.Helpers
|
|
||||||
{
|
|
||||||
public class NotificationIconInvokedEventArgs : EventArgs
|
|
||||||
{
|
|
||||||
public MouseButton MouseButton { get; internal set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,118 +0,0 @@
|
|||||||
using Microsoft.Windows.Sdk;
|
|
||||||
using NotificationFlyout.Wpf.UI.Extensions;
|
|
||||||
using System;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Interop;
|
|
||||||
|
|
||||||
namespace NotificationFlyout.Wpf.UI.Helpers
|
|
||||||
{
|
|
||||||
public class TaskbarHelper
|
|
||||||
{
|
|
||||||
private const string ShellTrayHandleName = "Shell_TrayWnd";
|
|
||||||
private const int SPI_SETWORKAREA = 0x002F;
|
|
||||||
|
|
||||||
private readonly uint WM_TASKBARCREATED = PInvoke.RegisterWindowMessage("TaskbarCreated");
|
|
||||||
|
|
||||||
private TaskbarHelper(Window window)
|
|
||||||
{
|
|
||||||
var handle = window.GetHandle();
|
|
||||||
|
|
||||||
var source = HwndSource.FromHwnd(handle);
|
|
||||||
source.AddHook(new HwndSourceHook(WndProc));
|
|
||||||
}
|
|
||||||
|
|
||||||
public event EventHandler TaskbarChanged;
|
|
||||||
|
|
||||||
private enum AppBarEdge : uint
|
|
||||||
{
|
|
||||||
Left = 0,
|
|
||||||
Top = 1,
|
|
||||||
Right = 2,
|
|
||||||
Bottom = 3
|
|
||||||
}
|
|
||||||
|
|
||||||
private enum AppBarMessage : uint
|
|
||||||
{
|
|
||||||
New = 0x00000000,
|
|
||||||
Remove = 0x00000001,
|
|
||||||
QueryPos = 0x00000002,
|
|
||||||
SetPos = 0x00000003,
|
|
||||||
GetState = 0x00000004,
|
|
||||||
GetTaskbarPos = 0x00000005,
|
|
||||||
Activate = 0x00000006,
|
|
||||||
GetAutoHideBar = 0x00000007,
|
|
||||||
SetAutoHideBar = 0x00000008,
|
|
||||||
WindowPosChanged = 0x00000009,
|
|
||||||
SetState = 0x0000000A,
|
|
||||||
}
|
|
||||||
|
|
||||||
public static TaskbarHelper Create(Window window)
|
|
||||||
{
|
|
||||||
return new TaskbarHelper(window);
|
|
||||||
}
|
|
||||||
|
|
||||||
public TaskbarState GetCurrentState()
|
|
||||||
{
|
|
||||||
var handle = GetSystemTrayHandle();
|
|
||||||
var state = new TaskbarState
|
|
||||||
{
|
|
||||||
Screen = Screen.FromHandle(handle)
|
|
||||||
};
|
|
||||||
|
|
||||||
var appBarData = GetAppBarData(handle);
|
|
||||||
GetAppBarPosition(ref appBarData);
|
|
||||||
|
|
||||||
state.Rect = appBarData.rect.ToRect();
|
|
||||||
state.Position = (TaskbarPosition)appBarData.uEdge;
|
|
||||||
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
|
|
||||||
[DllImport("user32.dll", SetLastError = true)]
|
|
||||||
private static extern IntPtr DefWindowProcW(IntPtr handle, uint msg, IntPtr wParam, IntPtr lParam);
|
|
||||||
|
|
||||||
private static IntPtr GetSystemTrayHandle()
|
|
||||||
{
|
|
||||||
return WindowHelper.GetHandle(ShellTrayHandleName);
|
|
||||||
}
|
|
||||||
|
|
||||||
[DllImport("shell32.dll", SetLastError = true)]
|
|
||||||
private static extern IntPtr SHAppBarMessage(AppBarMessage dwMessage, ref AppBarData pData);
|
|
||||||
|
|
||||||
private AppBarData GetAppBarData(IntPtr handle)
|
|
||||||
{
|
|
||||||
return new AppBarData
|
|
||||||
{
|
|
||||||
cbSize = (uint)Marshal.SizeOf(typeof(AppBarData)),
|
|
||||||
hWnd = handle
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
private void GetAppBarPosition(ref AppBarData appBarData)
|
|
||||||
{
|
|
||||||
SHAppBarMessage(AppBarMessage.GetTaskbarPos, ref appBarData);
|
|
||||||
}
|
|
||||||
|
|
||||||
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
|
|
||||||
{
|
|
||||||
if (msg == WM_TASKBARCREATED || msg == (int)WndProcMessages.WM_SETTINGCHANGE && (int)wParam == SPI_SETWORKAREA)
|
|
||||||
{
|
|
||||||
TaskbarChanged?.Invoke(this, EventArgs.Empty);
|
|
||||||
}
|
|
||||||
|
|
||||||
return DefWindowProcW(hwnd, (uint)msg, wParam, (lParam));
|
|
||||||
}
|
|
||||||
|
|
||||||
[StructLayout(LayoutKind.Sequential)]
|
|
||||||
private struct AppBarData
|
|
||||||
{
|
|
||||||
public uint cbSize;
|
|
||||||
public IntPtr hWnd;
|
|
||||||
public uint uCallbackMessage;
|
|
||||||
public AppBarEdge uEdge;
|
|
||||||
public RECT rect;
|
|
||||||
public int lParam;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
namespace NotificationFlyout.Wpf.UI
|
|
||||||
{
|
|
||||||
|
|
||||||
public enum TaskbarPosition
|
|
||||||
{
|
|
||||||
Left = 0,
|
|
||||||
Top = 1,
|
|
||||||
Right = 2,
|
|
||||||
Bottom = 3
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
using System.Windows;
|
|
||||||
|
|
||||||
namespace NotificationFlyout.Wpf.UI
|
|
||||||
{
|
|
||||||
public struct TaskbarState
|
|
||||||
{
|
|
||||||
public TaskbarPosition Position;
|
|
||||||
public Rect Rect;
|
|
||||||
public Screen Screen;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Microsoft.Windows.Sdk;
|
|
||||||
|
|
||||||
namespace NotificationFlyout.Wpf.UI.Helpers
|
|
||||||
{
|
|
||||||
public class WindowHelper
|
|
||||||
{
|
|
||||||
public static IntPtr GetHandle(string windowName)
|
|
||||||
{
|
|
||||||
return PInvoke.FindWindow(windowName, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static uint GetDpi(IntPtr handle)
|
|
||||||
{
|
|
||||||
return PInvoke.GetDpiForWindow((HWND)handle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
using System.Runtime.CompilerServices;
|
|
||||||
|
|
||||||
[assembly: InternalsVisibleTo("NotificationFlyout.Wpf.UI.Controls")]
|
|
||||||
@@ -1,120 +0,0 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
|
||||||
# Visual Studio Version 16
|
|
||||||
VisualStudioVersion = 16.0.30914.41
|
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotificationFlyout.Wpf.UI.Controls", "NotificationFlyout.Wpf.UI.Controls\NotificationFlyout.Wpf.UI.Controls.csproj", "{0A782234-DC9F-4C4A-8820-FC640B03D233}"
|
|
||||||
EndProject
|
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotificationFlyout.Uwp.UI.Controls", "NotificationFlyout.Uwp.UI.Controls\NotificationFlyout.Uwp.UI.Controls.csproj", "{9987B132-E42C-401A-9AD5-E62529FACA40}"
|
|
||||||
EndProject
|
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotificationFlyout.Wpf.UI", "NotificationFlyout.Wpf.UI\NotificationFlyout.Wpf.UI.csproj", "{29430194-7EDE-4C33-AF59-CE121F48F66E}"
|
|
||||||
EndProject
|
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B7EEAC24-4F8A-4C73-90B3-DAC77D44CCF2}"
|
|
||||||
ProjectSection(SolutionItems) = preProject
|
|
||||||
global.json = global.json
|
|
||||||
EndProjectSection
|
|
||||||
EndProject
|
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotificationFlyout.Uwp.UI", "NotificationFlyout.Uwp.UI\NotificationFlyout.Uwp.UI.csproj", "{3FE0D7F7-1173-4989-BE6C-AD28FE0D4AC9}"
|
|
||||||
EndProject
|
|
||||||
Global
|
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
|
||||||
Debug|Any CPU = Debug|Any CPU
|
|
||||||
Debug|ARM = Debug|ARM
|
|
||||||
Debug|ARM64 = Debug|ARM64
|
|
||||||
Debug|x64 = Debug|x64
|
|
||||||
Debug|x86 = Debug|x86
|
|
||||||
Release|Any CPU = Release|Any CPU
|
|
||||||
Release|ARM = Release|ARM
|
|
||||||
Release|ARM64 = Release|ARM64
|
|
||||||
Release|x64 = Release|x64
|
|
||||||
Release|x86 = Release|x86
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
|
||||||
{0A782234-DC9F-4C4A-8820-FC640B03D233}.Debug|Any CPU.ActiveCfg = Debug|x64
|
|
||||||
{0A782234-DC9F-4C4A-8820-FC640B03D233}.Debug|Any CPU.Build.0 = Debug|x64
|
|
||||||
{0A782234-DC9F-4C4A-8820-FC640B03D233}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
|
||||||
{0A782234-DC9F-4C4A-8820-FC640B03D233}.Debug|ARM.Build.0 = Debug|Any CPU
|
|
||||||
{0A782234-DC9F-4C4A-8820-FC640B03D233}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
|
||||||
{0A782234-DC9F-4C4A-8820-FC640B03D233}.Debug|ARM64.Build.0 = Debug|Any CPU
|
|
||||||
{0A782234-DC9F-4C4A-8820-FC640B03D233}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{0A782234-DC9F-4C4A-8820-FC640B03D233}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{0A782234-DC9F-4C4A-8820-FC640B03D233}.Debug|x86.ActiveCfg = Debug|Any CPU
|
|
||||||
{0A782234-DC9F-4C4A-8820-FC640B03D233}.Debug|x86.Build.0 = Debug|Any CPU
|
|
||||||
{0A782234-DC9F-4C4A-8820-FC640B03D233}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{0A782234-DC9F-4C4A-8820-FC640B03D233}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{0A782234-DC9F-4C4A-8820-FC640B03D233}.Release|ARM.ActiveCfg = Release|Any CPU
|
|
||||||
{0A782234-DC9F-4C4A-8820-FC640B03D233}.Release|ARM.Build.0 = Release|Any CPU
|
|
||||||
{0A782234-DC9F-4C4A-8820-FC640B03D233}.Release|ARM64.ActiveCfg = Release|Any CPU
|
|
||||||
{0A782234-DC9F-4C4A-8820-FC640B03D233}.Release|ARM64.Build.0 = Release|Any CPU
|
|
||||||
{0A782234-DC9F-4C4A-8820-FC640B03D233}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{0A782234-DC9F-4C4A-8820-FC640B03D233}.Release|x64.Build.0 = Release|x64
|
|
||||||
{0A782234-DC9F-4C4A-8820-FC640B03D233}.Release|x86.ActiveCfg = Release|Any CPU
|
|
||||||
{0A782234-DC9F-4C4A-8820-FC640B03D233}.Release|x86.Build.0 = Release|Any CPU
|
|
||||||
{9987B132-E42C-401A-9AD5-E62529FACA40}.Debug|Any CPU.ActiveCfg = Debug|x64
|
|
||||||
{9987B132-E42C-401A-9AD5-E62529FACA40}.Debug|Any CPU.Build.0 = Debug|x64
|
|
||||||
{9987B132-E42C-401A-9AD5-E62529FACA40}.Debug|ARM.ActiveCfg = Debug|ARM
|
|
||||||
{9987B132-E42C-401A-9AD5-E62529FACA40}.Debug|ARM.Build.0 = Debug|ARM
|
|
||||||
{9987B132-E42C-401A-9AD5-E62529FACA40}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
|
||||||
{9987B132-E42C-401A-9AD5-E62529FACA40}.Debug|ARM64.Build.0 = Debug|ARM64
|
|
||||||
{9987B132-E42C-401A-9AD5-E62529FACA40}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{9987B132-E42C-401A-9AD5-E62529FACA40}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{9987B132-E42C-401A-9AD5-E62529FACA40}.Debug|x86.ActiveCfg = Debug|x86
|
|
||||||
{9987B132-E42C-401A-9AD5-E62529FACA40}.Debug|x86.Build.0 = Debug|x86
|
|
||||||
{9987B132-E42C-401A-9AD5-E62529FACA40}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{9987B132-E42C-401A-9AD5-E62529FACA40}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{9987B132-E42C-401A-9AD5-E62529FACA40}.Release|ARM.ActiveCfg = Release|ARM
|
|
||||||
{9987B132-E42C-401A-9AD5-E62529FACA40}.Release|ARM.Build.0 = Release|ARM
|
|
||||||
{9987B132-E42C-401A-9AD5-E62529FACA40}.Release|ARM64.ActiveCfg = Release|ARM64
|
|
||||||
{9987B132-E42C-401A-9AD5-E62529FACA40}.Release|ARM64.Build.0 = Release|ARM64
|
|
||||||
{9987B132-E42C-401A-9AD5-E62529FACA40}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{9987B132-E42C-401A-9AD5-E62529FACA40}.Release|x64.Build.0 = Release|x64
|
|
||||||
{9987B132-E42C-401A-9AD5-E62529FACA40}.Release|x86.ActiveCfg = Release|x86
|
|
||||||
{9987B132-E42C-401A-9AD5-E62529FACA40}.Release|x86.Build.0 = Release|x86
|
|
||||||
{29430194-7EDE-4C33-AF59-CE121F48F66E}.Debug|Any CPU.ActiveCfg = Debug|x64
|
|
||||||
{29430194-7EDE-4C33-AF59-CE121F48F66E}.Debug|Any CPU.Build.0 = Debug|x64
|
|
||||||
{29430194-7EDE-4C33-AF59-CE121F48F66E}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
|
||||||
{29430194-7EDE-4C33-AF59-CE121F48F66E}.Debug|ARM.Build.0 = Debug|Any CPU
|
|
||||||
{29430194-7EDE-4C33-AF59-CE121F48F66E}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
|
||||||
{29430194-7EDE-4C33-AF59-CE121F48F66E}.Debug|ARM64.Build.0 = Debug|Any CPU
|
|
||||||
{29430194-7EDE-4C33-AF59-CE121F48F66E}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{29430194-7EDE-4C33-AF59-CE121F48F66E}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{29430194-7EDE-4C33-AF59-CE121F48F66E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
|
||||||
{29430194-7EDE-4C33-AF59-CE121F48F66E}.Debug|x86.Build.0 = Debug|Any CPU
|
|
||||||
{29430194-7EDE-4C33-AF59-CE121F48F66E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{29430194-7EDE-4C33-AF59-CE121F48F66E}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{29430194-7EDE-4C33-AF59-CE121F48F66E}.Release|ARM.ActiveCfg = Release|Any CPU
|
|
||||||
{29430194-7EDE-4C33-AF59-CE121F48F66E}.Release|ARM.Build.0 = Release|Any CPU
|
|
||||||
{29430194-7EDE-4C33-AF59-CE121F48F66E}.Release|ARM64.ActiveCfg = Release|Any CPU
|
|
||||||
{29430194-7EDE-4C33-AF59-CE121F48F66E}.Release|ARM64.Build.0 = Release|Any CPU
|
|
||||||
{29430194-7EDE-4C33-AF59-CE121F48F66E}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{29430194-7EDE-4C33-AF59-CE121F48F66E}.Release|x64.Build.0 = Release|x64
|
|
||||||
{29430194-7EDE-4C33-AF59-CE121F48F66E}.Release|x86.ActiveCfg = Release|Any CPU
|
|
||||||
{29430194-7EDE-4C33-AF59-CE121F48F66E}.Release|x86.Build.0 = Release|Any CPU
|
|
||||||
{3FE0D7F7-1173-4989-BE6C-AD28FE0D4AC9}.Debug|Any CPU.ActiveCfg = Debug|x64
|
|
||||||
{3FE0D7F7-1173-4989-BE6C-AD28FE0D4AC9}.Debug|Any CPU.Build.0 = Debug|x64
|
|
||||||
{3FE0D7F7-1173-4989-BE6C-AD28FE0D4AC9}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
|
||||||
{3FE0D7F7-1173-4989-BE6C-AD28FE0D4AC9}.Debug|ARM.Build.0 = Debug|Any CPU
|
|
||||||
{3FE0D7F7-1173-4989-BE6C-AD28FE0D4AC9}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
|
||||||
{3FE0D7F7-1173-4989-BE6C-AD28FE0D4AC9}.Debug|ARM64.Build.0 = Debug|Any CPU
|
|
||||||
{3FE0D7F7-1173-4989-BE6C-AD28FE0D4AC9}.Debug|x64.ActiveCfg = Debug|Any CPU
|
|
||||||
{3FE0D7F7-1173-4989-BE6C-AD28FE0D4AC9}.Debug|x64.Build.0 = Debug|Any CPU
|
|
||||||
{3FE0D7F7-1173-4989-BE6C-AD28FE0D4AC9}.Debug|x86.ActiveCfg = Debug|Any CPU
|
|
||||||
{3FE0D7F7-1173-4989-BE6C-AD28FE0D4AC9}.Debug|x86.Build.0 = Debug|Any CPU
|
|
||||||
{3FE0D7F7-1173-4989-BE6C-AD28FE0D4AC9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{3FE0D7F7-1173-4989-BE6C-AD28FE0D4AC9}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{3FE0D7F7-1173-4989-BE6C-AD28FE0D4AC9}.Release|ARM.ActiveCfg = Release|Any CPU
|
|
||||||
{3FE0D7F7-1173-4989-BE6C-AD28FE0D4AC9}.Release|ARM.Build.0 = Release|Any CPU
|
|
||||||
{3FE0D7F7-1173-4989-BE6C-AD28FE0D4AC9}.Release|ARM64.ActiveCfg = Release|Any CPU
|
|
||||||
{3FE0D7F7-1173-4989-BE6C-AD28FE0D4AC9}.Release|ARM64.Build.0 = Release|Any CPU
|
|
||||||
{3FE0D7F7-1173-4989-BE6C-AD28FE0D4AC9}.Release|x64.ActiveCfg = Release|Any CPU
|
|
||||||
{3FE0D7F7-1173-4989-BE6C-AD28FE0D4AC9}.Release|x64.Build.0 = Release|Any CPU
|
|
||||||
{3FE0D7F7-1173-4989-BE6C-AD28FE0D4AC9}.Release|x86.ActiveCfg = Release|Any CPU
|
|
||||||
{3FE0D7F7-1173-4989-BE6C-AD28FE0D4AC9}.Release|x86.Build.0 = Release|Any CPU
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
|
||||||
HideSolutionNode = FALSE
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
|
||||||
SolutionGuid = {EDFFB261-AD00-4C68-BF55-D5CED5BE0039}
|
|
||||||
EndGlobalSection
|
|
||||||
EndGlobal
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
using Microsoft.Windows.Sdk;
|
using Microsoft.Windows.Sdk;
|
||||||
|
|
||||||
namespace NotificationFlyout.Uwp.UI.Extensions
|
namespace TheXamlGuy.NotificationFlyout.Common.Extensions
|
||||||
{
|
{
|
||||||
internal class ExecutionMode
|
internal class ExecutionMode
|
||||||
{
|
{
|
||||||
@@ -2,13 +2,11 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using Windows.UI.Xaml.Media;
|
using Windows.UI.Xaml.Media;
|
||||||
using Windows.UI.Xaml.Media.Imaging;
|
using Windows.UI.Xaml.Media.Imaging;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace NotificationFlyout.Uwp.UI.Extensions
|
namespace TheXamlGuy.NotificationFlyout.Common.Extensions
|
||||||
{
|
{
|
||||||
public static class ImageSourceExtensions
|
public static class ImageSourceExtensions
|
||||||
{
|
{
|
||||||
@@ -20,17 +18,25 @@ namespace NotificationFlyout.Uwp.UI.Extensions
|
|||||||
var uri = $"{AppDomain.CurrentDomain.BaseDirectory}{bitmapImage.UriSource}".Replace("ms-appx:///", "").Replace("/", "\\");
|
var uri = $"{AppDomain.CurrentDomain.BaseDirectory}{bitmapImage.UriSource}".Replace("ms-appx:///", "").Replace("/", "\\");
|
||||||
|
|
||||||
using var stream = File.OpenRead(uri);
|
using var stream = File.OpenRead(uri);
|
||||||
return new Icon(stream, new Size(PInvoke.GetSystemMetricsForDpi((int)SystemMetricFlag.SM_CXICON, dpi), PInvoke.GetSystemMetricsForDpi((int)SystemMetricFlag.SM_CYICON, dpi)));
|
return ExtractIcon(dpi, stream);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var storageFile = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(bitmapImage.UriSource);
|
var storageFile = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(bitmapImage.UriSource);
|
||||||
using var stream = await storageFile.OpenStreamForReadAsync();
|
|
||||||
return new Icon(stream, new Size(PInvoke.GetSystemMetricsForDpi((int)SystemMetricFlag.SM_CXICON, dpi), PInvoke.GetSystemMetricsForDpi((int)SystemMetricFlag.SM_CYICON, dpi)));
|
|
||||||
|
|
||||||
|
using var stream = await storageFile.OpenStreamForReadAsync();
|
||||||
|
return ExtractIcon(dpi, stream);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Icon ExtractIcon(uint dpi, Stream stream)
|
||||||
|
{
|
||||||
|
var bitmap = (Bitmap)Image.FromStream(stream);
|
||||||
|
var icon = Icon.FromHandle(bitmap.GetHicon());
|
||||||
|
|
||||||
|
return new Icon(icon, new Size(PInvoke.GetSystemMetricsForDpi((int)SystemMetricFlag.SM_CXICON, dpi), PInvoke.GetSystemMetricsForDpi((int)SystemMetricFlag.SM_CYICON, dpi)));
|
||||||
|
}
|
||||||
|
|
||||||
private enum SystemMetricFlag : int
|
private enum SystemMetricFlag : int
|
||||||
{
|
{
|
||||||
SM_CXICON = 11,
|
SM_CXICON = 11,
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace TheXamlGuy.NotificationFlyout.Common.Extensions
|
||||||
|
{
|
||||||
|
public static class OperatingSystemExtensions
|
||||||
|
{
|
||||||
|
public static bool IsGreaterThan(this OperatingSystem operatingSystem, OperatingSystemVersion version) => operatingSystem.Version.Build > (int)version;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
namespace NotificationFlyout.Wpf.UI.Helpers
|
|
||||||
|
namespace TheXamlGuy.NotificationFlyout.Common.Extensions
|
||||||
{
|
{
|
||||||
public enum OperatingSystemVersion : int
|
public enum OperatingSystemVersion : int
|
||||||
{
|
{
|
||||||
@@ -1,14 +1,13 @@
|
|||||||
using Microsoft.Windows.Sdk;
|
using Microsoft.Windows.Sdk;
|
||||||
using System.Windows;
|
using Windows.Foundation;
|
||||||
|
|
||||||
namespace NotificationFlyout.Wpf.UI.Extensions
|
namespace TheXamlGuy.NotificationFlyout.Common.Extensions
|
||||||
{
|
{
|
||||||
internal static class RECTExtensions
|
internal static class RECTExtensions
|
||||||
{
|
{
|
||||||
internal static Rect ToRect(this RECT rect)
|
internal static Rect ToRect(this RECT rect)
|
||||||
{
|
{
|
||||||
if (rect.right - rect.left < 0 || rect.bottom - rect.top < 0) return new Rect(rect.left, rect.top, 0, 0);
|
if (rect.right - rect.left < 0 || rect.bottom - rect.top < 0) return new Rect(rect.left, rect.top, 0, 0);
|
||||||
|
|
||||||
return new Rect(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top);
|
return new Rect(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
|
|
||||||
namespace NotificationFlyout.Wpf.UI.Extensions
|
namespace TheXamlGuy.NotificationFlyout.Common.Extensions
|
||||||
{
|
{
|
||||||
public static class RegistryKeyExtensions
|
public static class RegistryKeyExtensions
|
||||||
{
|
{
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
using Microsoft.Windows.Sdk;
|
using Microsoft.Windows.Sdk;
|
||||||
|
|
||||||
namespace NotificationFlyout.Wpf.UI.Helpers
|
namespace TheXamlGuy.NotificationFlyout.Common.Helpers
|
||||||
{
|
{
|
||||||
internal class CursorHelper
|
internal class CursorHelper
|
||||||
{
|
{
|
||||||
public static POINT GetPhysicalCursorPos()
|
public static POINT GetPhysicalCursorPos()
|
||||||
{
|
{
|
||||||
PInvoke.GetPhysicalCursorPos(out POINT point);
|
PInvoke.GetPhysicalCursorPos(out var point);
|
||||||
return point;
|
return point;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace TheXamlGuy.NotificationFlyout.Common.Helpers
|
||||||
|
{
|
||||||
|
public partial class NotificationIconHelper
|
||||||
|
{
|
||||||
|
private enum NotifyIconBalloonType
|
||||||
|
{
|
||||||
|
None = 0x00,
|
||||||
|
Info = 0x01,
|
||||||
|
Warning = 0x02,
|
||||||
|
Error = 0x03,
|
||||||
|
User = 0x04,
|
||||||
|
NoSound = 0x10,
|
||||||
|
LargeIcon = 0x20,
|
||||||
|
RespectQuietTime = 0x80
|
||||||
|
}
|
||||||
|
|
||||||
|
private enum NotifyIconCommand : uint
|
||||||
|
{
|
||||||
|
Add = 0x0,
|
||||||
|
Delete = 0x2,
|
||||||
|
Modify = 0x1,
|
||||||
|
SetVersion = 0x4
|
||||||
|
}
|
||||||
|
|
||||||
|
[Flags]
|
||||||
|
private enum NotifyIconDataMember : uint
|
||||||
|
{
|
||||||
|
Message = 0x01,
|
||||||
|
Icon = 0x02,
|
||||||
|
Tip = 0x04,
|
||||||
|
State = 0x08,
|
||||||
|
Info = 0x10,
|
||||||
|
Realtime = 0x40,
|
||||||
|
UseLegacyToolTips = 0x80
|
||||||
|
}
|
||||||
|
|
||||||
|
private enum NotifyIconState : uint
|
||||||
|
{
|
||||||
|
Visible = 0x00,
|
||||||
|
Hidden = 0x01
|
||||||
|
}
|
||||||
|
|
||||||
|
[DllImport("user32.dll", SetLastError = true)]
|
||||||
|
private static extern IntPtr DefWindowProcW(IntPtr handle, uint msg, IntPtr wParam, IntPtr lParam);
|
||||||
|
|
||||||
|
[DllImport("shell32.dll", SetLastError = true)]
|
||||||
|
private static extern int Shell_NotifyIcon(NotifyIconCommand notifyCommand, ref NotifyIconData notifyIconData);
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
|
||||||
|
private struct NotifyIconData
|
||||||
|
{
|
||||||
|
public uint cbSize;
|
||||||
|
public IntPtr WindowHandle;
|
||||||
|
public uint TaskbarIconId;
|
||||||
|
public NotifyIconDataMember ValidMembers;
|
||||||
|
public uint CallbackMessageId;
|
||||||
|
public IntPtr IconHandle;
|
||||||
|
|
||||||
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
|
||||||
|
public string ToolTipText;
|
||||||
|
|
||||||
|
public NotifyIconState IconState;
|
||||||
|
public NotifyIconState StateMask;
|
||||||
|
|
||||||
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
|
||||||
|
public string BalloonText;
|
||||||
|
|
||||||
|
public uint VersionOrTimeout;
|
||||||
|
|
||||||
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
|
||||||
|
public string BalloonTitle;
|
||||||
|
|
||||||
|
public NotifyIconBalloonType BalloonFlags;
|
||||||
|
public Guid TaskbarIconGuid;
|
||||||
|
public IntPtr CustomBalloonIconHandle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace TheXamlGuy.NotificationFlyout.Common.Helpers
|
||||||
|
{
|
||||||
|
public partial class NotificationIconHelper : IDisposable, IWndProcHandler
|
||||||
|
{
|
||||||
|
private const int CallbackMessage = 0x400;
|
||||||
|
private const uint IconVersion = 0x4;
|
||||||
|
|
||||||
|
private readonly object _lock = new();
|
||||||
|
private bool _isDisposed;
|
||||||
|
private NotifyIconData _notifyIconData;
|
||||||
|
|
||||||
|
private NotificationIconHelper()
|
||||||
|
{
|
||||||
|
WndProcHandlerSubscriber.Current.Subscribe(this);
|
||||||
|
CreateNotificationIcon();
|
||||||
|
}
|
||||||
|
|
||||||
|
~NotificationIconHelper()
|
||||||
|
{
|
||||||
|
Dispose(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public event EventHandler<NotificationIconInvokedEventArgs> IconInvoked;
|
||||||
|
|
||||||
|
public static NotificationIconHelper Create() => new();
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
Dispose(true);
|
||||||
|
GC.SuppressFinalize(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Handle(uint message, IntPtr wParam, IntPtr lParam)
|
||||||
|
{
|
||||||
|
if (message == CallbackMessage)
|
||||||
|
{
|
||||||
|
switch ((uint)lParam)
|
||||||
|
{
|
||||||
|
case (uint)WndProcMessages.WM_LBUTTONUP:
|
||||||
|
InvokeIconInvoked(PointerButton.Left);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case (uint)WndProcMessages.WM_MBUTTONUP:
|
||||||
|
InvokeIconInvoked(PointerButton.Middle);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case (uint)WndProcMessages.WM_RBUTTONUP:
|
||||||
|
InvokeIconInvoked(PointerButton.Right);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetIcon(IntPtr iconHandle)
|
||||||
|
{
|
||||||
|
lock (_lock)
|
||||||
|
{
|
||||||
|
_notifyIconData.IconHandle = iconHandle;
|
||||||
|
WriteNotifyIconData(NotifyIconCommand.Modify, NotifyIconDataMember.Icon);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CreateNotificationIcon()
|
||||||
|
{
|
||||||
|
lock (_lock)
|
||||||
|
{
|
||||||
|
_notifyIconData = new NotifyIconData();
|
||||||
|
|
||||||
|
_notifyIconData.cbSize = (uint)Marshal.SizeOf(_notifyIconData);
|
||||||
|
_notifyIconData.WindowHandle = WndProcListener.Current.Handle;
|
||||||
|
_notifyIconData.TaskbarIconId = 0x0;
|
||||||
|
_notifyIconData.CallbackMessageId = CallbackMessage;
|
||||||
|
_notifyIconData.VersionOrTimeout = IconVersion;
|
||||||
|
|
||||||
|
_notifyIconData.IconHandle = IntPtr.Zero;
|
||||||
|
|
||||||
|
_notifyIconData.IconState = NotifyIconState.Hidden;
|
||||||
|
_notifyIconData.StateMask = NotifyIconState.Hidden;
|
||||||
|
|
||||||
|
WriteNotifyIconData(NotifyIconCommand.Add, NotifyIconDataMember.Message | NotifyIconDataMember.Icon | NotifyIconDataMember.Tip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (_isDisposed || !disposing) return;
|
||||||
|
lock (_lock)
|
||||||
|
{
|
||||||
|
_isDisposed = true;
|
||||||
|
RemoveNotificationIcon();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void InvokeIconInvoked(PointerButton pointerButton) => IconInvoked?.Invoke(this, new NotificationIconInvokedEventArgs(pointerButton));
|
||||||
|
|
||||||
|
private void RemoveNotificationIcon() => WriteNotifyIconData(NotifyIconCommand.Delete, NotifyIconDataMember.Message);
|
||||||
|
|
||||||
|
private void WriteNotifyIconData(NotifyIconCommand command, NotifyIconDataMember flags)
|
||||||
|
{
|
||||||
|
_notifyIconData.ValidMembers = flags;
|
||||||
|
lock (_lock)
|
||||||
|
{
|
||||||
|
Shell_NotifyIcon(command, ref _notifyIconData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace TheXamlGuy.NotificationFlyout.Common.Helpers
|
||||||
|
{
|
||||||
|
public class NotificationIconInvokedEventArgs : EventArgs
|
||||||
|
{
|
||||||
|
internal NotificationIconInvokedEventArgs(PointerButton pointerButton) => PointerButton = pointerButton;
|
||||||
|
|
||||||
|
public PointerButton PointerButton { get; private set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
namespace TheXamlGuy.NotificationFlyout.Common.Helpers
|
||||||
|
{
|
||||||
|
public enum PointerButton
|
||||||
|
{
|
||||||
|
Left = 0,
|
||||||
|
Middle = 1,
|
||||||
|
Right = 2,
|
||||||
|
XButton1 = 3,
|
||||||
|
XButton2 = 4
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
using Microsoft.Windows.Sdk;
|
using Microsoft.Windows.Sdk;
|
||||||
using NotificationFlyout.Wpf.UI.Helpers;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Windows;
|
using Windows.Foundation;
|
||||||
|
|
||||||
namespace NotificationFlyout.Wpf.UI
|
namespace TheXamlGuy.NotificationFlyout.Common.Helpers
|
||||||
{
|
{
|
||||||
public class Screen
|
public class Screen
|
||||||
{
|
{
|
||||||
@@ -62,14 +61,8 @@ namespace NotificationFlyout.Wpf.UI
|
|||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
if (obj is Screen monitor)
|
if (obj is not Screen monitor) return false;
|
||||||
{
|
return _monitorHandle == monitor._monitorHandle;
|
||||||
if (_monitorHandle == monitor._monitorHandle)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override int GetHashCode()
|
public override int GetHashCode()
|
||||||
@@ -1,9 +1,8 @@
|
|||||||
using Microsoft.Windows.Sdk;
|
using Microsoft.Windows.Sdk;
|
||||||
using System.Reflection;
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Windows;
|
using Windows.Foundation;
|
||||||
|
|
||||||
namespace NotificationFlyout.Wpf.UI.Helpers
|
namespace TheXamlGuy.NotificationFlyout.Common.Helpers
|
||||||
{
|
{
|
||||||
public static class SystemInformationHelper
|
public static class SystemInformationHelper
|
||||||
{
|
{
|
||||||
@@ -14,16 +13,6 @@ namespace NotificationFlyout.Wpf.UI.Helpers
|
|||||||
public static Rect VirtualScreen => GetVirtualScreen();
|
public static Rect VirtualScreen => GetVirtualScreen();
|
||||||
public static Rect WorkingArea => GetWorkingArea();
|
public static Rect WorkingArea => GetWorkingArea();
|
||||||
|
|
||||||
public static int GetCurrentDpi()
|
|
||||||
{
|
|
||||||
return (int)typeof(SystemParameters).GetProperty("Dpi", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static double GetCurrentDpiScaleFactor()
|
|
||||||
{
|
|
||||||
return (double)GetCurrentDpi() / 96;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Rect GetVirtualScreen()
|
private static Rect GetVirtualScreen()
|
||||||
{
|
{
|
||||||
var size = new Size(PInvoke.GetSystemMetrics(SM_CXSCREEN), PInvoke.GetSystemMetrics(SM_CYSCREEN));
|
var size = new Size(PInvoke.GetSystemMetrics(SM_CXSCREEN), PInvoke.GetSystemMetrics(SM_CYSCREEN));
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace NotificationFlyout.Wpf.UI.Helpers
|
namespace TheXamlGuy.NotificationFlyout.Common.Helpers
|
||||||
{
|
{
|
||||||
public class SystemPersonalisationChangedEventArgs : EventArgs
|
public class SystemPersonalisationChangedEventArgs : EventArgs
|
||||||
{
|
{
|
||||||
@@ -13,6 +13,5 @@ namespace NotificationFlyout.Wpf.UI.Helpers
|
|||||||
public SystemTheme Theme { get; private set; }
|
public SystemTheme Theme { get; private set; }
|
||||||
|
|
||||||
public bool IsColorPrevalence { get; private set; }
|
public bool IsColorPrevalence { get; private set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,24 +1,22 @@
|
|||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
using NotificationFlyout.Wpf.UI.Extensions;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Runtime.InteropServices;
|
using TheXamlGuy.NotificationFlyout.Common.Extensions;
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Interop;
|
|
||||||
using Windows.UI.ViewManagement;
|
using Windows.UI.ViewManagement;
|
||||||
|
|
||||||
namespace NotificationFlyout.Wpf.UI.Helpers
|
namespace TheXamlGuy.NotificationFlyout.Common.Helpers
|
||||||
{
|
{
|
||||||
public class SystemPersonalisationHelper
|
public class SystemPersonalisationHelper : IWndProcHandler
|
||||||
{
|
{
|
||||||
|
private static readonly Lazy<SystemPersonalisationHelper> _current = new(() => new SystemPersonalisationHelper());
|
||||||
|
|
||||||
private readonly UISettings _settings = new();
|
private readonly UISettings _settings = new();
|
||||||
private readonly string PersonalizeKey = @"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize";
|
private readonly string PersonalizeKey = @"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize";
|
||||||
private SystemTheme _currentTheme;
|
private SystemTheme _currentTheme;
|
||||||
private bool _isColorPrevalence;
|
private bool _isColorPrevalence;
|
||||||
|
|
||||||
private SystemPersonalisationHelper(Window window)
|
private SystemPersonalisationHelper()
|
||||||
{
|
{
|
||||||
var source = HwndSource.FromHwnd(window.GetHandle());
|
WndProcHandlerSubscriber.Current.Subscribe(this);
|
||||||
source.AddHook(new HwndSourceHook(WndProc));
|
|
||||||
|
|
||||||
_currentTheme = GetTheme();
|
_currentTheme = GetTheme();
|
||||||
_isColorPrevalence = GetIsColorPrevalence();
|
_isColorPrevalence = GetIsColorPrevalence();
|
||||||
@@ -26,16 +24,17 @@ namespace NotificationFlyout.Wpf.UI.Helpers
|
|||||||
|
|
||||||
public event EventHandler<SystemPersonalisationChangedEventArgs> ThemeChanged;
|
public event EventHandler<SystemPersonalisationChangedEventArgs> ThemeChanged;
|
||||||
|
|
||||||
|
public static SystemPersonalisationHelper Current => _current.Value;
|
||||||
public bool IsColorPrevalence => GetIsColorPrevalence();
|
public bool IsColorPrevalence => GetIsColorPrevalence();
|
||||||
public SystemTheme Theme => GetTheme();
|
public SystemTheme Theme => GetTheme();
|
||||||
|
|
||||||
public static SystemPersonalisationHelper Create(Window window)
|
public void Handle(uint message, IntPtr wParam, IntPtr lParam)
|
||||||
{
|
{
|
||||||
return new SystemPersonalisationHelper(window);
|
if (message == (int)WndProcMessages.WM_SETTINGCHANGE)
|
||||||
|
{
|
||||||
|
RaiseThemeChangedEvent();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[DllImport("user32.dll", SetLastError = true)]
|
|
||||||
private static extern IntPtr DefWindowProcW(IntPtr handle, uint msg, IntPtr wParam, IntPtr lParam);
|
|
||||||
|
|
||||||
private bool GetIsColorPrevalence()
|
private bool GetIsColorPrevalence()
|
||||||
{
|
{
|
||||||
@@ -63,15 +62,5 @@ namespace NotificationFlyout.Wpf.UI.Helpers
|
|||||||
ThemeChanged?.Invoke(this, new SystemPersonalisationChangedEventArgs(theme, isColorPrevalence));
|
ThemeChanged?.Invoke(this, new SystemPersonalisationChangedEventArgs(theme, isColorPrevalence));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
|
|
||||||
{
|
|
||||||
if (msg == (int)WndProcMessages.WM_SETTINGCHANGE)
|
|
||||||
{
|
|
||||||
RaiseThemeChangedEvent();
|
|
||||||
}
|
|
||||||
|
|
||||||
return DefWindowProcW(hwnd, (uint)msg, wParam, (lParam));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
namespace NotificationFlyout.Wpf.UI.Helpers
|
|
||||||
|
namespace TheXamlGuy.NotificationFlyout.Common.Helpers
|
||||||
{
|
{
|
||||||
public enum SystemTheme
|
public enum SystemTheme
|
||||||
{
|
{
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
using Microsoft.Windows.Sdk;
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace TheXamlGuy.NotificationFlyout.Common.Helpers
|
||||||
|
{
|
||||||
|
public partial class TaskbarHelper
|
||||||
|
{
|
||||||
|
private const string ShellTrayHandleName = "Shell_TrayWnd";
|
||||||
|
private const int SPI_SETWORKAREA = 0x002F;
|
||||||
|
private readonly uint WM_TASKBARCREATED = PInvoke.RegisterWindowMessage("TaskbarCreated");
|
||||||
|
|
||||||
|
private enum AppBarEdge : uint
|
||||||
|
{
|
||||||
|
Left = 0,
|
||||||
|
Top = 1,
|
||||||
|
Right = 2,
|
||||||
|
Bottom = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
private enum AppBarMessage : uint
|
||||||
|
{
|
||||||
|
New = 0x00000000,
|
||||||
|
Remove = 0x00000001,
|
||||||
|
QueryPos = 0x00000002,
|
||||||
|
SetPos = 0x00000003,
|
||||||
|
GetState = 0x00000004,
|
||||||
|
GetTaskbarPos = 0x00000005,
|
||||||
|
Activate = 0x00000006,
|
||||||
|
GetAutoHideBar = 0x00000007,
|
||||||
|
SetAutoHideBar = 0x00000008,
|
||||||
|
WindowPosChanged = 0x00000009,
|
||||||
|
SetState = 0x0000000A,
|
||||||
|
}
|
||||||
|
|
||||||
|
[DllImport("user32.dll", SetLastError = true)]
|
||||||
|
private static extern IntPtr DefWindowProcW(IntPtr handle, uint msg, IntPtr wParam, IntPtr lParam);
|
||||||
|
|
||||||
|
private static IntPtr GetSystemTrayHandle() => WindowHelper.GetHandle(ShellTrayHandleName);
|
||||||
|
|
||||||
|
[DllImport("shell32.dll", SetLastError = true)]
|
||||||
|
private static extern IntPtr SHAppBarMessage(AppBarMessage dwMessage, ref AppBarData pData);
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
private struct AppBarData
|
||||||
|
{
|
||||||
|
public uint cbSize;
|
||||||
|
public IntPtr hWnd;
|
||||||
|
public uint uCallbackMessage;
|
||||||
|
public AppBarEdge uEdge;
|
||||||
|
public RECT rect;
|
||||||
|
public int lParam;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using TheXamlGuy.NotificationFlyout.Common.Extensions;
|
||||||
|
|
||||||
|
namespace TheXamlGuy.NotificationFlyout.Common.Helpers
|
||||||
|
{
|
||||||
|
public partial class TaskbarHelper : IWndProcHandler
|
||||||
|
{
|
||||||
|
private TaskbarHelper() => WndProcHandlerSubscriber.Current.Subscribe(this);
|
||||||
|
|
||||||
|
public event EventHandler TaskbarChanged;
|
||||||
|
|
||||||
|
public static TaskbarHelper Create() => new();
|
||||||
|
|
||||||
|
public TaskbarState GetCurrentState()
|
||||||
|
{
|
||||||
|
var handle = GetSystemTrayHandle();
|
||||||
|
var state = new TaskbarState
|
||||||
|
{
|
||||||
|
Screen = Screen.FromHandle(handle)
|
||||||
|
};
|
||||||
|
|
||||||
|
var appBarData = GetAppBarData(handle);
|
||||||
|
GetAppBarPosition(ref appBarData);
|
||||||
|
|
||||||
|
state.Rect = appBarData.rect.ToRect();
|
||||||
|
state.Placement = (TaskbarPlacement)appBarData.uEdge;
|
||||||
|
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Handle(uint message, IntPtr wParam, IntPtr lParam)
|
||||||
|
{
|
||||||
|
if (message == WM_TASKBARCREATED || message == (int)WndProcMessages.WM_SETTINGCHANGE && (int)wParam == SPI_SETWORKAREA)
|
||||||
|
{
|
||||||
|
TaskbarChanged?.Invoke(this, EventArgs.Empty);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private AppBarData GetAppBarData(IntPtr handle)
|
||||||
|
{
|
||||||
|
return new AppBarData
|
||||||
|
{
|
||||||
|
cbSize = (uint)Marshal.SizeOf(typeof(AppBarData)),
|
||||||
|
hWnd = handle
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GetAppBarPosition(ref AppBarData appBarData) => SHAppBarMessage(AppBarMessage.GetTaskbarPos, ref appBarData);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
namespace TheXamlGuy.NotificationFlyout.Common.Helpers
|
||||||
|
{
|
||||||
|
public enum TaskbarPlacement
|
||||||
|
{
|
||||||
|
Left = 0,
|
||||||
|
Top = 1,
|
||||||
|
Right = 2,
|
||||||
|
Bottom = 3
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
using Windows.Foundation;
|
||||||
|
|
||||||
|
namespace TheXamlGuy.NotificationFlyout.Common.Helpers
|
||||||
|
{
|
||||||
|
public struct TaskbarState
|
||||||
|
{
|
||||||
|
public TaskbarPlacement Placement;
|
||||||
|
public Rect Rect;
|
||||||
|
public Screen Screen;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
using Microsoft.Windows.Sdk;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace TheXamlGuy.NotificationFlyout.Common.Helpers
|
||||||
|
{
|
||||||
|
public class WindowHelper
|
||||||
|
{
|
||||||
|
public static IntPtr GetHandle(string windowName) => PInvoke.FindWindow(windowName, null);
|
||||||
|
|
||||||
|
public static uint GetDpi(IntPtr handle) => PInvoke.GetDpiForWindow((HWND)handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace TheXamlGuy.NotificationFlyout.Common.Helpers
|
||||||
|
{
|
||||||
|
internal partial class WndProcHelper
|
||||||
|
{
|
||||||
|
[DllImport("user32.dll", SetLastError = true)]
|
||||||
|
private static extern IntPtr CreateWindowExW(uint dwExStyle, [MarshalAs(UnmanagedType.LPWStr)] string lpClassName, [MarshalAs(UnmanagedType.LPWStr)] string lpWindowName, uint dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, IntPtr hMenu, IntPtr hInstance, IntPtr lpParam);
|
||||||
|
|
||||||
|
[DllImport("user32.dll", SetLastError = true)]
|
||||||
|
private static extern IntPtr DefWindowProcW(IntPtr handle, uint msg, IntPtr wParam, IntPtr lParam);
|
||||||
|
|
||||||
|
[DllImport("user32.dll", SetLastError = true)]
|
||||||
|
private static extern bool DestroyWindow(IntPtr handle);
|
||||||
|
|
||||||
|
[DllImport("user32.dll", SetLastError = true)]
|
||||||
|
private static extern ushort RegisterClassW([In] ref WNDCLASSW lpWndClass);
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
private struct WNDCLASSW
|
||||||
|
{
|
||||||
|
public uint style;
|
||||||
|
public WndProcHandler lpfnWndProc;
|
||||||
|
public int cbClsExtra;
|
||||||
|
public int cbWndExtra;
|
||||||
|
public IntPtr hInstance;
|
||||||
|
public IntPtr hIcon;
|
||||||
|
public IntPtr hCursor;
|
||||||
|
public IntPtr hbrBackground;
|
||||||
|
[MarshalAs(UnmanagedType.LPWStr)] public string lpszMenuName;
|
||||||
|
[MarshalAs(UnmanagedType.LPWStr)] public string lpszClassName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace TheXamlGuy.NotificationFlyout.Common.Helpers
|
||||||
|
{
|
||||||
|
internal partial class WndProcHelper : IDisposable
|
||||||
|
{
|
||||||
|
private WndProcHandler _handler;
|
||||||
|
|
||||||
|
private WndProcHelper() => CreateWndProcWindow();
|
||||||
|
|
||||||
|
private delegate IntPtr WndProcHandler(IntPtr hwnd, uint uMsg, IntPtr wparam, IntPtr lparam);
|
||||||
|
|
||||||
|
public event EventHandler<WndProcHelperMessageEventArgs> WndProcMessage;
|
||||||
|
|
||||||
|
public IntPtr Handle { get; private set; }
|
||||||
|
|
||||||
|
public static WndProcHelper Create() => new();
|
||||||
|
|
||||||
|
public void Dispose() => DestroyWindow(Handle);
|
||||||
|
|
||||||
|
private void CreateWndProcWindow()
|
||||||
|
{
|
||||||
|
var windowName = Guid.NewGuid().ToString();
|
||||||
|
_handler = WndProc;
|
||||||
|
|
||||||
|
WNDCLASSW wndProcWindow;
|
||||||
|
|
||||||
|
wndProcWindow.style = 0;
|
||||||
|
wndProcWindow.lpfnWndProc = _handler;
|
||||||
|
wndProcWindow.cbClsExtra = 0;
|
||||||
|
wndProcWindow.cbWndExtra = 0;
|
||||||
|
wndProcWindow.hInstance = IntPtr.Zero;
|
||||||
|
wndProcWindow.hIcon = IntPtr.Zero;
|
||||||
|
wndProcWindow.hCursor = IntPtr.Zero;
|
||||||
|
wndProcWindow.hbrBackground = IntPtr.Zero;
|
||||||
|
wndProcWindow.lpszMenuName = "";
|
||||||
|
wndProcWindow.lpszClassName = windowName;
|
||||||
|
|
||||||
|
RegisterClassW(ref wndProcWindow);
|
||||||
|
|
||||||
|
Handle = CreateWindowExW(0, windowName, "", 0, 0, 0, 1, 1, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
|
||||||
|
}
|
||||||
|
|
||||||
|
private IntPtr WndProc(IntPtr handle, uint message, IntPtr wParam, IntPtr lParam)
|
||||||
|
{
|
||||||
|
WndProcMessage?.Invoke(this, new WndProcHelperMessageEventArgs(message, wParam, lParam));
|
||||||
|
return DefWindowProcW(handle, message, wParam, lParam);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace TheXamlGuy.NotificationFlyout.Common.Helpers
|
||||||
|
{
|
||||||
|
internal class WndProcHelperMessageEventArgs : EventArgs
|
||||||
|
{
|
||||||
|
public WndProcHelperMessageEventArgs(uint message, IntPtr wParam, IntPtr lParam)
|
||||||
|
{
|
||||||
|
Message = message;
|
||||||
|
WParam = wParam;
|
||||||
|
LParam = lParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IntPtr LParam { get; private set; }
|
||||||
|
public uint Message { get; private set; }
|
||||||
|
public IntPtr WParam { get; private set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
namespace NotificationFlyout.Wpf.UI.Helpers
|
|
||||||
|
namespace TheXamlGuy.NotificationFlyout.Common.Helpers
|
||||||
{
|
{
|
||||||
internal enum WndProcMessages
|
internal enum WndProcMessages
|
||||||
{
|
{
|
||||||
@@ -1,13 +1,14 @@
|
|||||||
Shell_NotifyIcon
|
Shell_NotifyIcon
|
||||||
GetSystemMetricsForDpi
|
|
||||||
DefWindowProcW
|
DefWindowProcW
|
||||||
GetSystemMetrics
|
|
||||||
MonitorFromWindow
|
MonitorFromWindow
|
||||||
RegisterWindowMessage
|
RegisterWindowMessage
|
||||||
SHAppBarMessage
|
SHAppBarMessage
|
||||||
SetWindowPos
|
|
||||||
GetWindowLong
|
GetWindowLong
|
||||||
SetWindowLong
|
|
||||||
GetDpiForWindow
|
GetDpiForWindow
|
||||||
FindWindow
|
FindWindow
|
||||||
GetPhysicalCursorPos
|
GetPhysicalCursorPos
|
||||||
|
GetSystemMetricsForDpi
|
||||||
|
GetCurrentPackageFullName
|
||||||
|
GetSystemMetrics
|
||||||
|
SetWindowLong
|
||||||
|
SetWindowPos
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
|
[assembly: InternalsVisibleTo("TheXamlGuy.NotificationFlyout.Wpf.UI")]
|
||||||
|
[assembly: InternalsVisibleTo("TheXamlGuy.NotificationFlyout.Wpf.UI.Extensions")]
|
||||||
|
[assembly: InternalsVisibleTo("TheXamlGuy.NotificationFlyout.Wpf.UI.Controls")]
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<Project Sdk="MSBuild.Sdk.Extras">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFrameworks>netcoreapp3.1</TargetFrameworks>
|
||||||
|
<LangVersion>9.0</LangVersion>
|
||||||
|
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||||
|
<Company>TheXamlGuy</Company>
|
||||||
|
<Company>TheXamlGuy</Company>
|
||||||
|
<Authors>Daniel Clark</Authors>
|
||||||
|
<Product>TheXamlGuy.NotificationFlyout</Product>
|
||||||
|
<Version>1.1.0</Version>
|
||||||
|
<Platforms>AnyCPU;x64</Platforms>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.Windows.SDK.Contracts" Version="10.0.19041.1" Condition="'$(TargetFramework)' == 'netcoreapp3.1'" />
|
||||||
|
<PackageReference Include="Microsoft.Win32.Registry" Version="6.0.0-preview.1.21102.12" />
|
||||||
|
<PackageReference Include="Microsoft.Windows.CsWin32" Version="0.1.319-beta">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="System.Drawing.Common" Version="6.0.0-preview.1.21102.12" />
|
||||||
|
<PackageReference Include="System.Memory" Version="4.5.4" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace TheXamlGuy.NotificationFlyout.Common.Helpers
|
||||||
|
{
|
||||||
|
public interface IWndProcHandler
|
||||||
|
{
|
||||||
|
void Handle(uint message, IntPtr wParam, IntPtr lParam);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace TheXamlGuy.NotificationFlyout.Common.Helpers
|
||||||
|
{
|
||||||
|
internal interface IWndProcHandlerCollection : IList<WndProcHandlerReference>
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||