GTK# 平台设置

Xamarin.Forms 现在对 GTK# 应用提供预览支持。 GTK# 是一个图形用户界面工具包,它将 GTK+ 工具包和各种 GNOME 库关联在一起,支持使用 Mono 和 .NET 开发完全本机的 GNOME 图形应用。 本文演示如何将 GTK# 项目添加到 Xamarin.Forms 解决方案。

重要

Xamarin.Forms 对 GTK# 的支持由社区提供。 有关详细信息,请参阅 Xamarin.Forms 平台支持

在开始之前,请创建新的 Xamarin.Forms 解决方案,或使用现有的 Xamarin.Forms 解决方案。

注意

本文主要介绍如何在 VS2017 和 Visual Studio for Mac 的 Xamarin.Forms 解决方案中添加 GTK# 应用,但此操作同样可以在 MonoDevelop for Linux 中执行。

添加 GTK# 应用

GTK# for macOS 和 GTK# for Linux 作为 Mono 的一部分安装。 GTK# for .NET 可通过 GTK# 安装程序安装在 Windows 上。

按照以下说明添加一个可在 Windows 桌面上运行的 GTK# 应用:

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

  2. 在“新建项目”窗口中,在左侧选择“Visual C#”和“Windows 经典桌面”。 在项目类型列表中,选择“类库 (. NET Framework)”,并确保将“框架”下拉列表设置为至少 .NET Framework 4.7

  3. 键入带有 GTK 扩展名的项目名称,例如 GameOfLife.GTK。 单击“浏览”按钮,选择包含其他平台项目的文件夹,然后按“选择文件夹”。 这会将 GTK 项目置于与解决方案中的其他项目相同的目录中。

    添加新的 GTK 项目

    按“确定”按钮以创建项目

  4. 在解决方案资源管理器中,右键单击新的 GTK 项目,然后选择“管理 NuGet 包”。 选择“浏览”选项卡,然后搜索 3.0 或更高版本Xamarin.Forms

    选择 Xamarin.Forms NuGet 包

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

  5. 现在搜索 Xamarin.Forms.Platform.GTK 3.0 包或更高版本。

    选择 Xamarin.Forms.Platform.GTK NuGet 包

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

  6. 在解决方案资源管理器中,右键单击解决方案名称,然后选择“管理解决方案的 NuGet 包”。 选择“更新”选项卡和 Xamarin.Forms。 选择所有项目并将其更新为 GTK 项目使用的相同 Xamarin.Forms 版本。

  7. 在解决方案资源管理器中,右键单击 GTK 项目中的“引用”。 在“引用管理器”对话框中,选择左侧的“项目”,并选中与 .NET Standard 或共享项目相邻的复选框

    引用共享项目

  8. 在“引用管理器”对话框中,按“浏览”按钮并浏览至 C:\Program Files (x86)\GtkSharp\2.12\lib 文件夹,然后选择 atk-sharp. dll、gdk-sharp.dll、glade-sharp.dll、glib-sharp.dll、gtk-dotnet.dll、gtk-sharp.dll文件

    引用 GTK# 库

    按“确定”按钮以添加引用

  9. 在 GTK 项目中,将 Class1.cs 重命名为 Program.cs

  10. 在 GTK 项目中,编辑 Program.cs 文件,使其类似于以下代码

    using System;
    using Xamarin.Forms;
    using Xamarin.Forms.Platform.GTK;
    
    namespace GameOfLife.GTK
    {
        class MainClass
        {
            [STAThread]
            public static void Main(string[] args)
            {
                Gtk.Application.Init();
                Forms.Init();
    
                var app = new App();
                var window = new FormsWindow();
                window.LoadApplication(app);
                window.SetApplicationTitle("Game of Life");
                window.Show();
    
                Gtk.Application.Run();
            }
        }
    }
    

    此代码初始化 GTK# 和 Xamarin.Forms,创建应用程序窗口并运行应用。

  11. 在解决方案资源管理器中,右键单击 GTK 项目并选择“属性”

  12. 在“属性”窗口中,选择“应用程序”选项卡,并将“输出类型”下拉列表更改为“Windows 应用程序”

    更改项目输出类型

  13. 在解决方案资源管理器中,右键单击 GTK 项目并选择“设置为启动项目”。 按 F5 在 Windows 桌面上使用 Visual Studio 调试程序来运行程序:

    GTK# Game of Life

后续步骤

平台特定信息

可以通过 XAML 或代码确定 Xamarin.Forms 应用程序正在哪个平台上运行。 这样就可以在程序在 GTK# 上运行时更改程序特征。 在代码中,将 Device.RuntimePlatform 的值与 Device.GTK 常量(等于字符串“GTK”)进行比较。 如果存在匹配,则表明应用程序正在 GTK# 上运行。

在 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="GTK" Value="Blue" />
    </OnPlatform>
</Button.TextColor>

应用程序图标

可以在启动时设置应用图标:

window.SetApplicationIcon("icon.png");

主题

有各种各样的主题可用于 GTK#,它们可从 Xamarin.Forms 应用使用:

GtkThemes.Init ();
GtkThemes.LoadCustomTheme ("Themes/gtkrc");

本机窗体

Native Forms 支持本机项目(包括 GTK# 项目)使用 Xamarin.FormsContentPage 派生页面。 这可以通过创建 ContentPage 派生页面的实例,并使用 CreateContainer 扩展方法将其转换为本机 GTK# 类型来实现:

var settingsView = new SettingsView().CreateContainer();
vbox.PackEnd(settingsView, true, true, 0);

有关 Native Forms 的详细信息,请参阅 Native Forms

问题

这是预览版,因此你应该预料到并非所有内容都已处于生产就绪状态。 有关当前实现状态,请参阅状态,有关当前已知问题,请参阅待处理和已知问题