Create highly performant UI with WinUi2
(Uwp) and enjoy the freedom of Win32
!
You don't need any interop code for the .GetForCurrentView()
methods.
- The library does currently not support any Uwp-Frame related apis
- Therefore not frame customization
- Creating a new window is only possible with the library apis
- Pickers still need
IInitializeWithWindow
(See #11)
- Create new Uwp project (UI-Project)
- Add
<EnableTypeInfoReflection>false</EnableTypeInfoReflection>
in to the project file - Add reference to this library
- Create new
netcoreapp3.1
WinExe
project (Host-Project) - Add reference to
Microsoft.Toolkit.Win32.UI.SDK
- Add reference to Uwp project
- Add
TargetPlatformVersion
andAssetTargetFallback
to the project file - Redirect main method to the Uwp main method (See below)
This is needed for the management of all the dependency and runtime stuff.
Should contain no logic.
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<Platforms>x86;x64</Platforms>
<AssetTargetFallback>uap10.0.19041</AssetTargetFallback>
<TargetPlatformVersion>10.0.19041</TargetPlatformVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Toolkit.Win32.UI.SDK" Version="6.1.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="<PATH_TO_UWP_PROJECT>" />
</ItemGroup>
</Project>
public class Program
{
[STAThread]
public static void Main(string[] args)
{
NAMESPACE.Program.Main(args);
}
}
Should contain all logic.
<?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>
<EnableTypeInfoReflection>false</EnableTypeInfoReflection>
</PropertyGroup>
...
</Project>
public class Program
{
[STAThread]
public static void Main(string[] args)
{
FullTrustApplication.Start((_) => new App());
}
}
var view = FullTrustApplication.CreateNewView();
_ = view.CoreWindow.Dispatcher.RunIdleAsync((x) =>
{
Window.Current.Content = new MainPage();
Window.Current.Activate();
});