Настройка платформы GTK#

Xamarin.Forms Теперь доступна предварительная версия поддержки приложений GTK#. GTK# — это графический набор средств пользовательского интерфейса, который связывает набор средств GTK+ и различные библиотеки GNOME, что позволяет разрабатывать полностью собственные графические приложения GNOME с помощью Mono и .NET. В этой статье показано, как добавить проект GTK# в Xamarin.Forms решение.

Внимание

Xamarin.Forms поддержка GTK# предоставляется сообществом. Дополнительные сведения см. в разделе Xamarin.Forms "Поддержка платформы".

Прежде чем начать, создайте новое Xamarin.Forms решение или используйте существующее Xamarin.Forms решение, например GameOfLife.

Примечание.

Хотя эта статья посвящена добавлению приложения GTK# в Xamarin.Forms решение в VS2017 и Visual Studio для Mac, его также можно выполнить в MonoDevelop для Linux.

Добавление приложения GTK#

GTK# для macOS и Linux устанавливается в составе Mono. GTK# для .NET можно установить в Windows с помощью установщика GTK#.

Выполните следующие инструкции, чтобы добавить приложение GTK#, которое будет работать на рабочем столе Windows:

  1. В Visual Studio 2019 щелкните правой кнопкой мыши имя решения в Обозреватель решений и выберите "Добавить > новый проект...".

  2. В окне "Новый проект" в левой части экрана выберите Visual C# и Классический рабочий стол Windows. В списке типов проектов выберите библиотеку классов (платформа .NET Framework)и убедитесь, что раскрывающийся список Framework установлен как минимум платформа .NET Framework 4.7.

  3. Введите имя проекта с расширением GTK , например GameOfLife.GTK. Нажмите кнопку "Обзор ", выберите папку, содержащую другие проекты платформы, и нажмите клавишу SELECT FOLDER. При этом проект GTK будет помещен в тот же каталог, что и другие проекты в решении.

    Add a new GTK project

    Нажмите кнопку "ОК", чтобы создать проект.

  4. В Обозреватель решений щелкните правой кнопкой мыши новый проект GTK и выберите пункт "Управление пакетами NuGet". Выберите вкладку "Обзор " и найдите Xamarin.Forms 3.0 или более поздней версии.

    Select the Xamarin.Forms NuGet package

    Выберите пакет и нажмите кнопку "Установить ".

  5. Теперь выполните Xamarin.Formsпоиск . Пакет Platform.GTK 3.0 или больше.

    Select the Xamarin.Forms.Platform.GTK NuGet package

    Выберите пакет и нажмите кнопку "Установить ".

  6. В Обозреватель решений щелкните правой кнопкой мыши имя решения и выберите пункт "Управление пакетами NuGet для решения". Выберите вкладку "Обновить" и Xamarin.Forms пакет. Выберите все проекты и обновите их до той же Xamarin.Forms версии, что и проект GTK.

  7. В Обозреватель решений щелкните правой кнопкой мыши ссылки в проекте GTK. В диалоговом окне "Диспетчер ссылок" выберите "Проекты" слева и проверка поле проверка рядом с проектом .NET Standard или Shared:

    Reference the shared project

  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 файлов.

    Reference the GTK# libraries

    Нажмите кнопку "ОК", чтобы добавить ссылки.

  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.

    Change the project output type

  13. В Обозреватель решений щелкните правой кнопкой мыши проект GTK и выберите "Задать в качестве запускаемого проекта". Нажмите клавишу F5, чтобы запустить программу с отладчиком Visual Studio на рабочем столе Windows:

    GTK# Game of Life

Next Steps

Особенности платформы

Вы можете определить, на какой платформе Xamarin.Forms работает ваше приложение из XAML или кода. Это позволяет изменять характеристики программы при запуске в 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");

Themes

Существует множество тем, доступных для GTK#, и их можно использовать из Xamarin.Forms приложения:

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

Собственные формы

Native Forms позволяет Xamarin.FormsContentPageиспользовать производные страницы собственными проектами, включая проекты GTK#. Это можно сделать, создав экземпляр ContentPageпроизводной страницы и преобразовав его в собственный тип GTK# с помощью CreateContainer метода расширения:

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

Дополнительные сведения о машинных формах см. в разделе "Собственные формы".

Проблемы

Это предварительная версия, поэтому следует ожидать, что не все готово к работе. Сведения о текущем состоянии реализации см. в разделе "Состояние" и сведения о текущих известных проблемах, см. в разделе "Ожидающие" и "Известные проблемы".