WPF プラットフォームのセットアップ

Preview label

Xamarin.Forms には、Windows Presentation Foundation (WPF)、.NET Framework、.NET Core 3 のプレビュー サポートがあります。 この記事では、.NET Framework を対象とする WPF プロジェクトを Xamarin.Forms ソリューションに追加する方法について説明します。

重要

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

開始する前に、Visual Studio 2019 で新しい Xamarin.Forms ソリューションを作成するか、既存の Xamarin.Forms ソリューション (BoxViewClock など) を使用してください。 WPF アプリは、Windows の Xamarin.Forms ソリューションにのみ追加できます。

WPF アプリケーションを追加する

次の手順に従って、Windows 7、8、10 デスクトップで実行される WPF アプリケーションを追加します。

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

  2. [新しいプロジェクトの追加] ウィンドウで、[言語] ドロップダウンで [C#] を選択し、[プラットフォーム] ドロップダウンで [Windows] を選択し、[プロジェクトの種類] ドロップダウンで [デスクトップ] を選択します。 プロジェクトの種類のリストで [WPF アプリ (.NET Framework)] を選択します。

    Screenshot shows the Add a new project dialog box with W P F App selected.

    [次へ] ボタンを押します。

    Note

    Xamarin.Forms 4.7 には、.NET Core 3 で実行される WPF アプリのサポートが含まれています。

  3. [新しいプロジェクトの構成] ウィンドウで、プロジェクトの名前と WPF 拡張子 (BoxViewClock.WPF など) を入力します。 [参照] ボタンをクリックし、[BoxViewClock] フォルダーを選択し、[フォルダーの選択] を押して、ソリューション内のその他のプロジェクトと同じディレクトリに WPF プロジェクトを配置します。

    Screenshot shows the Configure you new project dialog box with values for Project name, Location, and Framework.

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

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

    Select the NuGet package

    パッケージを選択し、[インストール] ボタンをクリックします。

  5. ソリューション エクスプローラーでソリューション名を右クリックし、[ソリューションの NuGet パッケージの管理...] を選択します。[更新] タブを選択し、Xamarin.Forms パッケージを選択します。 すべてのプロジェクトを選択し、これらを同じ Xamarin.Forms バージョンに更新します。

    Update the NuGet package

  6. WPF プロジェクトで [参照] を右クリックし、[参照の追加...] を選択します。[参照マネージャー] ダイアログで、左側にある [プロジェクト] を選択し、BoxViewClock プロジェクトの横にあるチェック ボックスをチェックします。

    Reference the shared project

    [OK] ボタンをクリックします。

  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 ファイルを編集します。 2 つの新しい using ディレクティブを追加します。

    using Xamarin.Forms;
    using Xamarin.Forms.Platform.WPF;
    

    MainWindow の基底クラスを Window から FormsApplicationPage に変更します。 InitializeComponent 呼び出しの後、次の 2 つのステートメントを追加します。

    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 Clock

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

Xamarin.Forms アプリケーションが実行されているプラットフォームは、コード または XAML から判断できます。 これにより、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 サポート ビデオ