LoginSignup
5
6

More than 5 years have passed since last update.

Xamarin.FormsでWPF・GTKアプリも開発してみたかった

Last updated at Posted at 2018-03-17

※以下の記事で使用したファイル群を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 アプリ開発を今からしてみる

操作手順を総ざらい

  1. Visual Studioで「ツール→オプション→NuGet パッケージマネージャー→パッケージソース」と進み、パッケージソースにNightly Builds のソースを追加する
  2. 新規プロジェクトをテンプレート「Cross-Platform App (Xamarin.Forms)」から作成する。
    • 使用フレームワークは「.NET Framework 4.7」以降とし、PCLではなくShared Projectを選択する
  3. 2.で作成したソリューションに、新規プロジェクトをテンプレート「WPF アプリ (.NET Frameowrk)」から追加する
    • その際、2.で作成したShared ProjectをWPF側のプロジェクトの参照に追加すること
  4. NuGetパッケージマネージャーを開き、パッケージソースを「Xamarin.Forms Nightly」に切り替え、Nightly BuildsのXamarin.Formsを全プロジェクトに追加
  5. WPFのプロジェクトに、NugetでNightly BuildsのXamarin.Forms.Platform.WPFを追加
  6. この記述を読みながら、WPF側のスタートアップコードを整える

いったいどこが分からなかったのか?

 操作手順5.までは滞りなく進んだ……と言いたいところでしたが、操作手順3.の「Shared ProjectをWPF側のプロジェクトの参照に追加」がなかなかできませんでした。この「追加→参照→共有プロジェクト→ソリューション」で出てくるこれにチェックを入れる必要があるようですが、初見でそれを察するのは厳しい……。
image.png

 また、↑を行った後に6.を実装してみましたが、WPFのMainWindow.xamlは、結局

MainWindowOld.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>

MainWindowNew.xaml
<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も

AppOld.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>

AppNew.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>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/WPFLightToolkit;component/Assets/Default.xaml" />
            </ResourceDictionary.MergedDictionaries>
            <SolidColorBrush x:Key="AccentColor" Color="#303F9F" />
        </ResourceDictionary>
    </Application.Resources>
</Application>

に書き換えろということですよね?
 ……ただ、こうして書き換えてからWPF側をビルドしようとすると、次のようなビルドエラーが出てしまいます。Android側のプロジェクトにもエラーが出ていますが、そちらはビルド・実行できてしまう不思議。

image.png

 エラー内容を見ると、たぶん「Microsoft.Windows.Design.Extensibility」が抜けているのだと思われますので、「参照→参照の追加→アセンブリ→拡張」から追加してやると、WPF側もビルド・実行できました(これが正しい処置かは知らない)。

image.png

おまけ:GTKアプリの場合

 手順自体は前述の記事に書いてある通りなので省略します。

image.png

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6