GTK# プラットフォームのセットアップ

Xamarin.Forms 現在、GTK# アプリのプレビュー サポートが提供されています。 GTK# は、GTK+ ツールキットとさまざまな GNOME ライブラリをリンクするグラフィカル ユーザー インターフェイス ツールキットであり、Mono と .NET を使用して完全にネイティブな GNOME グラフィックス アプリを開発できます。 この記事では、GTK# プロジェクトをソリューションに追加する方法について Xamarin.Forms 説明します。

重要

Xamarin.Forms GTK# のサポートはコミュニティによって提供されます。 詳細については、「プラットフォームのサポート」を参照してください。Xamarin.Forms

開始する前に、新Xamarin.Formsしいソリューションを作成するか、既存Xamarin.Formsのソリューション (GameOfLife など) を使用します。

Note

この記事では、VS2017 および Visual Studio for Mac のソリューションに Xamarin.Forms GTK# アプリを追加することに重点を置いていますが、MonoDevelop for Linux でも実行できます。

GTK# アプリの追加

macOS および Linux 用の GTK# は Mono一部としてインストールされます。 .NET 用 GTK# は、GTK# インストーラーを使用して Windows にインストールできます。

Windows デスクトップで実行される GTK# アプリを追加するには、次の手順に従います。

  1. Visual Studio 2019 で、ソリューション エクスプローラーソリューション名を右クリックし、[新しいプロジェクトの追加>]を選択します

  2. [新しいプロジェクト] ウィンドウの左側にある Visual C#Windows クラシック デスクトップを選択します。 プロジェクトの種類の一覧で[クラス ライブラリ (.NET Framework)]を選択し、[フレームワーク] ドロップダウンが最低でも .NET Framework 4.7 に設定されていることを確認します。

  3. プロジェクトの名前を GTK 拡張子で入力します (例: GameOfLife.GTK)。 [参照] ボタンをクリックし、他のプラットフォーム プロジェクトを含むフォルダーを選択し、[フォルダーの選択] をクリックします。 これにより、GTK プロジェクトがソリューション内の他のプロジェクトと同じディレクトリに配置されます。

    Add a new GTK project

    [OK] ボタンを押してプロジェクトを作成します。

  4. ソリューション エクスプローラー、新しい GTK プロジェクトを右クリックし、[NuGet パッケージの管理] を選択します。 [参照] タブを選択し、3.0 以上をXamarin.Forms検索します。

    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選択します。 すべてのプロジェクトを選択し、GTK プロジェクトで使用されているのと同じ Xamarin.Forms バージョンに更新します。

  7. ソリューション エクスプローラー、GTK プロジェクトの [参照] を右クリックします。 [参照マネージャー] ダイアログで、左側にある [プロジェクト] を選択し、.NET Standard または共有プロジェクトの横にある チェック ボックスをチェックします。

    Reference the shared project

  8. [参照マネージャー] ダイアログで、[参照] ボタンを押して C:\Program Files (x86)\GtkSharp\2.12\lib フォルダーを参照し、atk-sharp.dll、gdk-sharp.dll、glade-sharp.dllglib-sharp.dllgtk-dotnet.dllgtk-sharp.dll ファイルを選択します。

    Reference the GTK# libraries

    [OK] ボタンを押して参照を追加します。

  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 キーを押して、Windows デスクトップ上の Visual Studio デバッガーでプログラムを実行します。

    GTK# Game of Life

次のステップ

プラットフォーム固有設定

アプリケーションが実行されているプラットフォーム Xamarin.Forms は、XAML またはコードから判断できます。 これにより、GTK# で実行されているときにプログラムの特性を変更できます。 コードで、定数 (文字列 "GTK" と等しい) と値を比較Device.RuntimePlatformDevice.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");

ネイティブ フォーム

ネイティブ フォームを使用すると、 Xamarin.FormsContentPage-derived ページを GTK# プロジェクトを含むネイティブ プロジェクトで使用できます。 これを実現するには、-derived ページの ContentPageインスタンスを作成し、拡張メソッドを使用してネイティブ GTK# 型に CreateContainer 変換します。

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

ネイティブ フォームの詳細については、「ネイティブ フォーム」を参照してください

問題

これはプレビューなので、すべてが運用環境に対応しているわけではないことを期待する必要があります。 現在の実装状態については、「状態」を参照し、現在の既知の問題については、「保留中の問題」と「既知の問題」を参照してください