WPF 平台设置
Xamarin.Forms 在 .NET Framework 和 .NET Core 3 上提供了对 Windows Presentation Foundation (WPF) 的预览版支持。 本文演示如何将面向 .NET Framework 的 WPF 项目添加到 Xamarin.Forms 解决方案中。
重要
Xamarin.Forms 对 WPF 的支持由社区提供。 有关详细信息,请参阅 Xamarin.Forms 平台支持。
在开始之前,请在 Visual Studio 2019 中创建新的 Xamarin.Forms 解决方案,或使用现有的 Xamarin.Forms 解决方案。
添加 WPF 应用程序
按照以下说明添加将在 Windows 7、8 和 10 桌面上运行的 WPF 应用程序:
在 Visual Studio 2019 中,右键单击“解决方案资源管理器”中的解决方案名称,然后选择“添加”>“新建项目...”。
在“添加新项目”窗口的“语言”下拉列表中选择“C#”,在“平台”下拉列表中选择“Windows”,然后在“项目类型”下拉列表中选择“桌面”。 在项目类型列表中,选择“WPF 应用(.NET Framework)”:
按“下一步”按钮。
注意
Xamarin.Forms 4.7 包括对在 .NET Core 3 上运行的 WPF 应用的支持。
在“配置新项目”窗口中,键入带 WPF 扩展名的项目名称,例如 BoxViewClock.WPF。 单击“浏览”按钮,选择“BoxViewClock”文件夹,然后按“选择文件夹”将 WPF 项目置于解决方案中的其他项目所在的目录:
按“创建”按钮以创建项目。
在“解决方案资源管理器”中,右键单击新的“BoxViewClock.WPF”项目,然后选择“管理 NuGet 包...”。选择“浏览”选项卡,然后搜索“Xamarin.Forms.Platform.WPF”:
选择该包并单击“安装”按钮。
在“解决方案资源管理器”中右键单击解决方案名称,然后选择“管理解决方案的 NuGet 包...”。选择“更新”选项卡,然后选择 Xamarin.Forms 包。 选择所有项目并将它们更新到相同的 Xamarin.Forms 版本:
在 WPF 项目中,右键单击“引用”,然后选择“添加引用...”。在“引用管理器”对话框的左侧选择“项目”,并勾选“BoxViewClock”项目旁边的复选框:
按“确认”按钮。
编辑 WPF 项目的 MainWindow.xaml 文件。 在
Window
标记中,为 Xamarin.Forms.Platform.WPF 程序集和命名空间添加 XML 命名空间声明:xmlns:wpf="clr-namespace:Xamarin.Forms.Platform.WPF;assembly=Xamarin.Forms.Platform.WPF"
现在,将
Window
标记更改为wpf:FormsApplicationPage
。 将Title
设置更改为应用程序的名称,例如 BoxViewClock。 完成的 XAML 文件应如下所示:<wpf:FormsApplicationPage x:Class="BoxViewClock.WPF.MainWindow" 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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:BoxViewClock.WPF" xmlns:wpf="clr-namespace:Xamarin.Forms.Platform.WPF;assembly=Xamarin.Forms.Platform.WPF" mc:Ignorable="d" Title="BoxViewClock" Height="450" Width="800"> <Grid> </Grid> </wpf:FormsApplicationPage>
编辑 WPF 项目的 MainWindow.xaml.cs 文件。 添加两个新的
using
指令:using Xamarin.Forms; using Xamarin.Forms.Platform.WPF;
将
MainWindow
的基类从Window
更改为FormsApplicationPage
。 在进行InitializeComponent
调用后,添加以下两个语句:Forms.Init(); LoadApplication(new BoxViewClock.App());
除了注释和未使用的
using
指令外,完整的 MainWindows.xaml.cs 文件应如下所示:using Xamarin.Forms; using Xamarin.Forms.Platform.WPF; namespace BoxViewClock.WPF { public partial class MainWindow : FormsApplicationPage { public MainWindow() { InitializeComponent(); Forms.Init(); LoadApplication(new BoxViewClock.App()); } } }
右键单击“解决方案资源管理器”中的 WPF 项目,并选择“设为启动项目”。 按 F5 在 Windows 桌面上使用 Visual Studio 调试程序来运行程序:
平台特定内容
可以通过代码或 XAML 确定 Xamarin.Forms 应用程序正在哪个平台上运行。 这样就可以在程序在 WPF 上运行时更改程序特征。 在代码中,将 Device.RuntimePlatform
的值与 Device.WPF
常量(等于字符串“WPF”)进行比较。 如果存在匹配,则表明应用程序正在 WPF 上运行。
在 XAML 中,可以使用 OnPlatform
标记来选择特定于平台的属性值:
<Button.TextColor>
<OnPlatform x:TypeArguments="Color">
<On Platform="iOS" Value="White" />
<On Platform="macOS" Value="White" />
<On Platform="Android" Value="Black" />
<On Platform="WPF" Value="Blue" />
</OnPlatform>
</Button.TextColor>
窗口大小
可以在 WPF MainWindow.xaml 文件中调整窗口的初始大小:
Title="BoxViewClock" Height="450" Width="800"
问题
这是预览版,因此你应该预料到,并非所有内容都已准备好投入生产。 并非 Xamarin.Forms 的所有 NuGet 包都适合 WPF,并且某些功能可能无法完全运行。
相关视频
Xamarin.Forms 3.0 WPF 支持视频