rksoftware

Visual Studio とか C# とかが好きです

Xamarin でクラシックデスクトップアプリ

Xamarin。Forms でクラシックデスクトップアプリ(WPF)が作れるらしいので試してみました。

■ 参考

何番煎じかわからない状況ですが、Xamarin.Forms の v3.0.0.296286-pre2 が NuGet に乗って多少手順も楽になったので書き残しておきます。

■ プロジェクトの作成

Cross-Platform > Mobile App (Xamarin.Forms) を選択し、新規作成します。
f:id:rksoftware:20180322005419j:plain
ここで、少し気になる点として、(Xamarin.Forms) という記載がありますが、先に進めます。
テンプレートの作成では、Code Sharing Strategy で日本で良く選ばれている .NET Standard を選択。
f:id:rksoftware:20180322005437j:plain
ここで皆さんお気づきでしょうか?
かつてあった UI TechnologyXamarin.Forms or Native の選択がなくなっていることに。
Native のソリューション作るのが少し手間になりそうですね。

■ クラシックデスクトップアプリ プロジェクトの追加

ソリューションに WPF アプリのプロジェクトを追加します。
プロジェクトテンプレートで クラシックデスクトップアプリ > WPF App を選択してください。
.NET Framework は 4.6.1 で大丈夫です。

■ クラシックデスクトップアプリ へ プロジェクト参照の追加

WPF アプリのプロジェクトから、.NET Stardard プロジェクトを参照するよう、参照の追加をしてください。

■ NuGet の更新/追加

ソリューションの NuGet パッケージの管理で、ソリューションのすべてのプロジェクトに、pre の Xamarin.Forms を更新/追加してください。
NuGet の画面で、「プレリリースを含める」チェックを ON にするのがポイントです。
f:id:rksoftware:20180322005508j:plain

■ クラシックデスクトップアプリ へ NuGet の追加

WPF アプリのプロジェクトに Xamarin.Forms.Platform.WPF パッケージを追加します。
f:id:rksoftware:20180322005524j:plain

■ クラシックデスクトップアプリ の 変更

WPF アプリの MainWindow クラスを変更します。

  • コードビハインド ( MainWindow.xaml.cs ) で基底クラスを Xamarin.Forms.Platform.WPF.FormsApplicationPage に変更します。
  • コンストラクタに Xamarin.Forms.Forms.Init();LoadApplication(new {ソリューション名}.App()); を追加します。
  • 合わせて xaml ( MainWindow.xaml.cs ) xmlns:xam="clr-namespace:Xamarin.Forms.Platform.WPF;assembly=Xamarin.Forms.Platform.WPF" を追加します。
  • さらに xaml のトップレベルの要素を xam:FormsApplicationPage に変更します。

結果二つのファイルは次のようになります。
※ここでは、XWpfV3 というソリューション名にしています。

namespace XWpfV3.Wpf
{
    public partial class MainWindow : Xamarin.Forms.Platform.WPF.FormsApplicationPage
    {
        public MainWindow()
        {
            InitializeComponent();

            Xamarin.Forms.Forms.Init();
            LoadApplication(new XWpfV3.App());
        }
    }
}
<xam:FormsApplicationPage x:Class="XWpfV3.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:XWpfV3.Wpf"
        xmlns:xam="clr-namespace:Xamarin.Forms.Platform.WPF;assembly=Xamarin.Forms.Platform.WPF"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        
    </Grid>
</xam:FormsApplicationPage>

■ 実行

実行すると、あっさり Welcome to Xamarin.Forms! です。
f:id:rksoftware:20180322005540j:plain

簡単ですね。
次回以降、共有コード内の画面定義 MainPage.xaml を編集していってみようと思います。