乘风破浪,基于XAML岛(Xaml Islands)唤新WPF和WinForm应用,创建现代化应用体验
什么是XAML岛(Xaml Islands)
简介
从Windows10 1903
版开始,可以使用称为“XAML岛(Xaml Islands
)”的功能在非UWP桌面应用程序中托管WinRT XAML
控件。可以通过此功能来改进现有WPF
、Windows窗体
和C++桌面(Win32)
应用程序的外观和功能,并使用只能通过WinRT XAML
控件使用的最新Windows10 UI
功能。这意味着,可以在现有的WPF
、Windows窗体
和C++
桌面应用程序中使用UWP功能(例如Windows Ink
)和支持Fluent Design System
的控件。
可以托管派生自Windows.UI.Xaml.UIElement
的任何WinRT XAML
控件,其中包括:
Windows SDK
或WinUI2.x
库提供的任何第一方WinRT XAML
控件。- 任何自定义
WinRT XAML
控件(例如,包含多个可一起使用的WinRT XAML
控件的用户控件)。必须有自定义控件的源代码,才能通过应用程序对其进行编译。
从根本上讲,XAML岛
使用UWP XAML
托管API创建。此API包含Windows 10版本1903 SDK中引入的几个Windows运行时类和COM接口。我们还在Windows社区工具包中提供了一组XAML岛.NET控件(此工具包在内部使用UWP XAML托管API),并针对WPF和Windows窗体应用提供了更方便的开发体验。
XAML岛(Xaml Islands)的体系结构
XAML岛具有以下运行时要求
- Windows 10版本1903或更高版本。
- 如果你的应用程序未打包到MSIX包中用于部署,则必须在计算机上安装Visual C++运行时。
反馈问题
基于XAML岛(Xaml Islands)唤新WPF应用和WinForm应用
创建名为HelloXamlIslands的解决方案
通过Dotnet-Cli
创建一个名为HelloXamlIslands
的解决方案。
dotnet new sln -o HelloXamlIslands
切换到它的目录中。
cd .\HelloXamlIslands\
创建.Net Core 3.1的WPF应用
通过Dotnet-Cli
创建一个.Net Core版本为3.1的Wpf应用,我们叫它demoForWpf3.1
吧。
dotnet new wpf -o demoForWpf3.1 -f netcoreapp3.1
将其加入HelloXamlIslands
解决方案中。
dotnet sln add .\demoForWpf3.1\demoForWpf3.1.csproj
切换到它目录。
cd .\demoForWpf3.1\
通过Dotnet-Cli
的Run
命令来运行它。
dotnet watch run
运行效果如图:
添加Microsoft.Toolkit.Wpf控件库包
dotnet add package Microsoft.Toolkit.Wpf.UI.Controls
https://www.nuget.org/packages/Microsoft.Toolkit.Wpf.UI.Controls
创建.Net Core 3.1的WinForm应用
通过Dotnet-Cli
创建一个.Net Core版本为3.1的WinForm应用,我们叫它demoForWinform3.1
吧。
dotnet new winforms -o demoForWinform3.1 -f netcoreapp3.1
将其加入HelloXamlIslands
解决方案中。
dotnet sln add .\demoForWinform3.1\demoForWinform3.1.csproj
切换到它目录。
cd .\demoForWinform3.1\
通过Dotnet-Cli
的Run
命令来运行它。
dotnet watch run
运行效果如图:
添加Microsoft.Toolkit.Forms控件库包
dotnet add package Microsoft.Toolkit.Forms.UI.Controls
https://www.nuget.org/packages/Microsoft.Toolkit.Forms.UI.Controls
将解决方案配置为面向X86/X64平台
大多数XAML岛方案在面向任何CPU的项目中不受支持。
- 在“解决方案资源管理器”中,右键单击相应的解决方案节点,选择“属性” -> “配置属性” -> “配置管理器” 。
- 在“活动解决方案平台” 下,选择“新建” 。
- 在“新建解决方案平台”对话框中,选择“x64”或“x86”,并按“确认” 。
- 关闭打开的对话框。
创建目标不低于Windows 10 1903的UWP应用
先用Vs2019打开sln文件。
在解决方案上右键添加,选择新建项目
。
搜索项目模板关键词UWP
,选择空白应用(通用Windows)
模板进行下一步
。
输入项目名demoForUwp
,点击创建
按钮。
项目的最低目标版本需要用Windows10, Version 1903(10.0;版本 18362)
,至于最高目标版本就默认值吧。
点击确定
,完成创建。
添加Microsoft.Toolkit.Win32控件库包
https://www.nuget.org/packages/Microsoft.Toolkit.Win32.UI.XamlApplication
在demoForUwp
上右键,找到管理Nuget程序包
选项。
搜索关键词Microsoft.Toolkit.Win32.UI.XamlApplication
,进行安装。
切换到X86
或者X64
模式,运行一下看看。
改造UWP项目,准备Islands
找到demoForUwp
项目中的App.xaml
文件,双击打开它。
<Application
x:Class="demoForUwp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:demoForUwp">
</Application>
将App.xaml
上述内容替换下:
<xaml:XamlApplication
x:Class="demoForUwp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:xaml="using:Microsoft.Toolkit.Win32.UI.XamlHost"
xmlns:local="using:demoForUwp">
</xaml:XamlApplication>
或者简化为:
<xaml:XamlApplication
x:Class="demoForUwp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:demoForUwp"
xmlns:xaml="using:Microsoft.Toolkit.Win32.UI.XamlHost" />
然后找到App.xaml.cs
,打开它。
替换所有内容为:
namespace demoForUwp
{
public sealed partial class App : Microsoft.Toolkit.Win32.UI.XamlHost.XamlApplication
{
public App()
{
this.Initialize();
}
}
}
然后删除掉项目模板自动生成的MainPage.xaml
及其MainPage.xaml.cs
文件。
重新生成一次项目。