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 应用程序:

  1. 在 Visual Studio 2019 中,右键单击“解决方案资源管理器”中的解决方案名称,然后选择“添加”>“新建项目...”

  2. 在“添加新项目”窗口的“语言”下拉列表中选择“C#”,在“平台”下拉列表中选择“Windows”,然后在“项目类型”下拉列表中选择“桌面”。 在项目类型列表中,选择“WPF 应用(.NET Framework)”

    屏幕截图显示了“添加新项目”对话框,其中选择了 W P F 应用。

    按“下一步”按钮。

    注意

    Xamarin.Forms 4.7 包括对在 .NET Core 3 上运行的 WPF 应用的支持。

  3. 在“配置新项目”窗口中,键入带 WPF 扩展名的项目名称,例如 BoxViewClock.WPF。 单击“浏览”按钮,选择“BoxViewClock”文件夹,然后按“选择文件夹”将 WPF 项目置于解决方案中的其他项目所在的目录:

    屏幕截图显示了“配置新项目”对话框,其中包含“项目名称”、“位置”和“框架”的值。

    按“创建”按钮以创建项目。

  4. 在“解决方案资源管理器”中,右键单击新的“BoxViewClock.WPF”项目,然后选择“管理 NuGet 包...”。选择“浏览”选项卡,然后搜索“Xamarin.Forms.Platform.WPF”:

    选择 NuGet 包

    选择该包并单击“安装”按钮。

  5. 在“解决方案资源管理器”中右键单击解决方案名称,然后选择“管理解决方案的 NuGet 包...”。选择“更新”选项卡,然后选择 Xamarin.Forms 包。 选择所有项目并将它们更新到相同的 Xamarin.Forms 版本:

    更新 NuGet 包

  6. 在 WPF 项目中,右键单击“引用”,然后选择“添加引用...”。在“引用管理器”对话框的左侧选择“项目”,并勾选“BoxViewClock”项目旁边的复选框:

    引用共享项目

    “确认”按钮。

  7. 编辑 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>
    
  8. 编辑 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());
            }
        }
    }
    
  9. 右键单击“解决方案资源管理器”中的 WPF 项目,并选择“设为启动项目”。 按 F5 在 Windows 桌面上使用 Visual Studio 调试程序来运行程序:

    WPF BoxView 时钟

平台特定内容

可以通过代码或 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 支持视频