※以下の記事で使用したファイル群をGitHubにアップロードしています。
YSRKEN/HelloXamarin
概要
@tan-y さんの記事を読んで試してみました。
なお操作環境は、Windows 10 64bit
の上でVisual Studio Community 2017 Version 15.6.2
を使用するとしています。
Xamarin.Formsで Windows (Classic) Desktop アプリ開発を今からしてみる
もう少し簡単に Xamarin.Forms で Windows (Classic) Desktop アプリ開発を今からしてみる
操作手順を総ざらい
- Visual Studioで「ツール→オプション→NuGet パッケージマネージャー→パッケージソース」と進み、パッケージソースにNightly Builds のソースを追加する
- 名前は「Xamarin.Forms Nightly」、URLはhttps://www.myget.org/F/xamarinforms-ci/api/v2とする
- 新規プロジェクトをテンプレート「Cross-Platform App (Xamarin.Forms)」から作成する。
- 使用フレームワークは「.NET Framework 4.7」以降とし、PCLではなくShared Projectを選択する
- 2.で作成したソリューションに、新規プロジェクトをテンプレート「WPF アプリ (.NET Frameowrk)」から追加する
- その際、2.で作成したShared ProjectをWPF側のプロジェクトの参照に追加すること
- NuGetパッケージマネージャーを開き、パッケージソースを「Xamarin.Forms Nightly」に切り替え、Nightly BuildsのXamarin.Formsを全プロジェクトに追加
- WPFのプロジェクトに、NugetでNightly BuildsのXamarin.Forms.Platform.WPFを追加
- この記述を読みながら、WPF側のスタートアップコードを整える
いったいどこが分からなかったのか?
操作手順5.までは滞りなく進んだ……と言いたいところでしたが、操作手順3.の「Shared ProjectをWPF側のプロジェクトの参照に追加」がなかなかできませんでした。この「追加→参照→共有プロジェクト→ソリューション」で出てくるこれにチェックを入れる必要があるようですが、初見でそれを察するのは厳しい……。
また、↑を行った後に6.を実装してみましたが、WPFのMainWindow.xamlは、結局
<Window
x:Class="HelloXamarin.WPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
</Window>
を
<wpf:FormsApplicationPage
x:Class="HelloXamarin.WPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:wpf="clr-namespace:Xamarin.Forms.Platform.WPF;assembly=Xamarin.Forms.Platform.WPF"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
</wpf:FormsApplicationPage>
に書き換えろということですよね? また、App.xamlも
<Application
x:Class="HelloXamarin.WPF.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:HelloXamarin.WPF"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>
を
<Application
x:Class="HelloXamarin.WPF.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:HelloXamarin.WPF"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/WPFLightToolkit;component/Assets/Default.xaml" />
</ResourceDictionary.MergedDictionaries>
<SolidColorBrush x:Key="AccentColor" Color="#303F9F" />
</ResourceDictionary>
</Application.Resources>
</Application>
に書き換えろということですよね?
……ただ、こうして書き換えてからWPF側をビルドしようとすると、次のようなビルドエラーが出てしまいます。Android側のプロジェクトにもエラーが出ていますが、そちらはビルド・実行できてしまう不思議。
エラー内容を見ると、たぶん「Microsoft.Windows.Design.Extensibility」が抜けているのだと思われますので、「参照→参照の追加→アセンブリ→拡張」から追加してやると、WPF側もビルド・実行できました(これが正しい処置かは知らない)。
おまけ:GTKアプリの場合
手順自体は前述の記事に書いてある通りなので省略します。