質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

2回答

5621閲覧

Xamarin.Forms.WPFにPrismを適用する方法

roamschemer

総合スコア31

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2018/12/04 08:31

編集2018/12/04 08:45

Xamarin.Forms.WPF でデスクトップアプリを作る
https://rksoftware.hatenablog.com/entry/2018/06/21/020053

を参考にWPFを追加する事はできたのですが、それにNugetパッケージのPrismを適用する方法がわかりませんでした。

無理なんゃないかとも思い始めていますが、もしご存知の方がいらっしゃいましたらご教授ください。

以下が試したことです。

・PrismのテンプレートからXamarin.Formsを作成する
・Nugetパッケージから更新プログラムを全て最新にする
・ソリューション→右クリック→追加→新しいプロジェクト
・Visual C#→Windows デスクトップ→WPFアプリ(.NET Framework)
・参照を一つ下の階層に変更。名称は.WPFを付ける。フレームワークは4.7を選択してOK
・WPFプロジェクト→参照を右クリック→参照の追加
・プロジェクト→ソリューション→PCLにチェック→OK
・NugetパッケージからXamarin.Forms.Platform.WPFをWPFプロジェクトに適用
・NugetパッケージからPrism.Dryloc.Formsを全プロジェクトに適用
MainWindow.xaml.cs

C#

1namespace XFWPF.WPF 2{ 3 /// <summary> 4 /// MainWindow.xaml の相互作用ロジック 5 /// </summary> 6 public partial class MainWindow : Xamarin.Forms.Platform.WPF.FormsApplicationPage 7 { 8 public MainWindow() 9 { 10 InitializeComponent(); 11 Xamarin.Forms.Forms.Init(); 12 LoadApplication(new XFWPF.App(new WpfInitializer())); 13 } 14 15 public class WpfInitializer : IPlatformInitializer 16 { 17 public void RegisterTypes(IContainerRegistry containerRegistry) 18 { 19 // Register any platform specific implementations 20 } 21 } 22 23 } 24}

MainWindow.xaml

Xaml

1<xf:FormsApplicationPage 2 x:Class="XFWPF.WPF.MainWindow" 3 xmlns:xf="clr-namespace:Xamarin.Forms.Platform.WPF;assembly=Xamarin.Forms.Platform.WPF" 4 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 5 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 6 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 7 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 8 xmlns:local="clr-namespace:XFWPF.WPF" 9 mc:Ignorable="d" 10 Title="MainWindow" Height="450" Width="800"> 11 <Grid> 12 13 </Grid> 14</xf:FormsApplicationPage>

では以下のエラーが出てダメでした。

System.Windows.Markup.XamlParseException
HResult=0x80131501
Message='指定されたバインディング制約に一致する型 'XFWPF.WPF.MainWindow' のコンストラクターの呼び出しで例外がスローされました。' 行番号 '8'、行位置 '5'。
Source=PresentationFramework
スタック トレース:
場所 System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)

内部例外 1:
TypeLoadException: アセンブリ 'Prism, Version=7.1.0.431, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59' から型 'Prism.Navigation.INavigationService' を読み込めませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2018/12/04 08:38

方法がわからなかったというのは普通にやってみてできなかったという意味ですか? ならばその手順と結果を示してください。
roamschemer

2018/12/04 08:46

試したことを追加しました。通常テンプレートから作成している為、普通というのが何なのかがわかりません。
Zuishin

2018/12/04 08:49

一番最初の手順からリンク先と違っているようですが……
roamschemer

2018/12/04 08:52

最初の手順はPrismを使わない場合なので手順は違うと思います。Prismを使わない場合は上手くいったけれどという意味です。わかりにくくてすいません。
Zuishin

2018/12/04 08:58 編集

Prism のテンプレートが Xamarin.WPF に対応していないのであれば、まず Xamarin.WPF のテンプレートを使って骨組みを作り、そこに Prism を導入するほかはないと思います。
Zuishin

2018/12/04 08:57

ですから、最初の手順はリンク先の通りでなければなりません。
roamschemer

2018/12/04 09:02

成程。その場合、同時に生成したAndroidやiOS,UWPも一からPrismを適用せざるを得なくなるので面倒だと思ったのですが、手段がないなら仕方がないですね。Prismはテンプレートからしか使ったことが無いのでちょっと手こずるかもしれませんが、結果が出たらお知らせします。
roamschemer

2018/12/07 10:52

一番似ていると思われるXamarin.UWPを後から追加する事は出来ました。ですがWPFに関してはやはり'Prism, Version=7.1.0.431, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59' から型 'Prism.Navigation.INavigationService' を読み込めませんでした。より先に進めませんでした。Prism適用後にも関わらずINavigationServiceを呼び出せないという事は、やはり無理なのでしょうか?現状手掛かりが全くなく、無理なら無理であるとどなたか言ってもらえると非常に助かります。
guest

回答2

0

ベストアンサー

今更なのですが、Xamarin.Forms.WPFでもPrismを適用することができましたので、Qiitaの方に記事を書きました。よろしければ、ご覧になってください。

Xamarin.Forms.WPFでPrismを使う

投稿2019/02/21 16:22

編集2019/02/21 16:26
f-miyu

総合スコア1625

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

roamschemer

2019/02/26 08:01

返信遅れて申し訳ない。わざわざ記事までありがとうございます! 早速やってみましたが、「Prism.DryIoc.FormsやPrism.Unity.Formsプロジェクトで、パックを実行する」という操作がわからず頓挫してしまいました。 環境はVisual Studio 2017です。 操作方法か参考ページを教えてはいただけないでしょうか?
f-miyu

2019/02/26 08:20 編集

ソリューションエクスプローラーでPrism.DryIoc.Formsのプロジェクトを選択して、右クリックすると、表示ウインドウにパックという項目があるので、それをクリックしてください。
roamschemer

2019/02/26 16:02

ソリューションエクスプローラーで「ソリューション及びフォルダー」というボタンを押して出現したPrism.DryIoc.Formsに右クリックでパックを選択できました。フォルダビューとなっている場合はダメなのですね。 しかし、 エラー APPX3217 'UAP 10.0.15063.0' の 'UAP.props' が含まれる SDK フォルダーが見つかりません。詳しくは、http://go.microsoft.com/fwlink/?LinkID=798187 をご覧ください。 Prism C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\VisualStudio\v15.0\AppxPackage\Microsoft.AppXPackage.Targets が発生して出力が失敗しました。 その為、Visual Studio Installerより、詳細→変更を選択。 Visual Studio Community 2017 個別のコンポーネントより UWP用Windows 10 SDK(10.0.15063.0):C#,VB,JS にチェックを入れてインストール後、再度パックを実行すると 次の NuGet パッケージを復元中にエラーが発生しました: プロジェクト Prism.Autofac.Forms の詳細を読み込めなかったため、操作が失敗しました。 が発生しましたが、無事出力されていました。 あとは実際にそのパッケージを使用してWPFの動作確認まできました!本当に助かりました。ありがとうございました!
guest

0

不可能であるという事が分かりましたので報告をして閉じさせていただきます。
INavigationService not found

投稿2019/01/17 05:47

編集2019/01/17 05:48
roamschemer

総合スコア31

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

roamschemer

2019/02/26 08:03

他の回答が付いたため、未解決に戻しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問