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

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

新規登録して質問してみよう
ただいま回答率
85.48%
UWP

UWPは、Universal Windows Platformの略。様々なデバイス向けに提供されているアプリケーションを共通のフレームワーク上で動作可能にする仕組みで、Windows10で導入されました。

C#

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

Q&A

解決済

1回答

1552閲覧

【UWP】「プログラムから開く」でアプリを起動した後の画面で、画面遷移ができない問題。

heroherohero

総合スコア38

UWP

UWPは、Universal Windows Platformの略。様々なデバイス向けに提供されているアプリケーションを共通のフレームワーク上で動作可能にする仕組みで、Windows10で導入されました。

C#

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

0グッド

0クリップ

投稿2019/09/04 04:38

UWP(Prism version6.3)で、アプリの開発を行っております。

下記内容を実装したいと思い、色々と調べてみたのですが、実装方法が分からなかったため、質問させていただきます。

実現したいこと

「プログラムから開く」で、画面を表示させることはできたのですが、そのあとの画面で、ボタンを押下して画面遷移をしようと試みているのですが、うまくできません。

調べたこと/試したこと

デバッグで試したところ、Clickに設定した処理(下記ソースコード)には、流れていくのですが、なぜか、うまく動作してくれません。
その後、(ファイル名).g.csファイルに移動しますが、何も動作がありません。
※ちなみに、正しく動作する場合も、Clickの処理が終了したのち、(ファイル名).g.csファイルに遷移しておりました。

ViewModelではなく、コードビハインドでも試しましたが、こちらも、上記同様に、Clickに設定した処理には、流れていくのですが、画面遷移ができませんでした。

C#

1 // ViewModelのソースコードになります。 2 public void NavigateAlbumList() 3 { 4 NavigationService.Navigate(PageTokens.AlbumListPage, null); 5 }

何をどのように調べたらよいかも分からず、些細なことでもよいので情報をいただけますと幸いです。

どうぞ、よろしくお願いいたします。

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

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

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

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

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

tor4kichi

2019/09/04 06:08

「プログラムから開く」ではなく、アプリ内で問題が発生しているページに遷移した場合には同様の問題は起きますか?
heroherohero

2019/09/04 07:54 編集

実は、今回の画面ですが、「プログラムから開く」でしか、アクセスしない画面になりますので、アドバイスいただいた確認をすることができません。また、色々試していた結果、画面遷移はできるようになりました。 コードビハインドに以下の記述することで、画面遷移することができました。画面遷移できなかった時には、コードビハインドのメソッドの引数に余分なものを書いてしまっていました。 public void NavigateAlbumList() { Frame.Navigate(typeof(AlbumListPage), null); } しかし、未だにViewModelからの遷移ができないこと。 また、今度は、遷移先の画面が期待通りに描画してくれません。。。ViewModeの、「OnNavigatedTo」で画面に描画するコンテンツを取得してきているのですが、そこを通っていないようです。 遷移先の画面のViewModelが期待通りに動いてくれていないのではないかなと思っているのですが、そんなことありますでしょうか。 (「OnNavigatedTo」メソッドの先頭にブレイクポイントを置いていても、止まってくれませんでした。。) よろしくお願いいたします。
tor4kichi

2019/09/04 08:05

PageTokens.AlbumListPageの文字列がコピペミス等で間違ってる可能性はありませんか? であればnameof(Views.AlbumListPage)とするだけでも解消できそうです。
heroherohero

2019/09/04 08:44 編集

確認しましたが、特に入力ミス等は見受けられませんでした。 また、いただいたものを実行したところ、以下のようなエラーが出力されました。 Value does not fall within the expected range. 何か、全体的に思った通りに動いていない原因が見えてきそうな気がしてきましたが、いかがでしょうか。 ご確認のほど、よろしくお願いいたします。
tor4kichi

2019/09/04 09:05

原因が見えてきそうな気がしてきたんですか? 私にはさっぱりです。 これ以上はこちらが冷静に対応できないと感じましたので切り上げます。
guest

回答1

0

自己解決

前提として、今回のアプリでは、「Windows Template Studio 」のPrismを利用して開発をしておりました。

そうしたところ、通常のアプリ起動時に、App.xaml.cs内の自動生成された下記メソッドたちが呼ばれていることが分かりました。(デバッグをしていて気づきました。)

上から順に呼ばれています。

C#

1protected override void ConfigureContainer() 2rotected override IDeviceGestureService OnCreateDeviceGestureService() 3protected override async Task OnInitializeAsync(IActivatedEventArgs args) 4protected override async Task OnLaunchApplicationAsync(LaunchActivatedEventArgs args)

しかし、右クリックをして、開くときに自分が書いていたコードは、一部省力しますが、下記のようになっておりました。(一般的に、ググって良く出てくるサイトに書いてある書き方です。)

C#

1protected override async void OnFileActivated(FileActivatedEventArgs args) 2{ 3 base.OnFileActivated(args); 4 var rootFrame = new Frame(); 5 rootFrame.Navigate(typeof(ReflectionRegisterDirectoryPage), strPhotoDetail); 6 Window.Current.Content = rootFrame; 7 Window.Current.Activate(); 8}

そうした場合、上記の通常のアプリ起動時に呼ばれているはずのメソッドが呼ばれていなかったので、それらを呼ぶように、「OnFileActivated」メソッド内に追加したところ、動作するようになりました。

そして、この中の一番の肝は、「OnInitializeAsync」メソッドだと思います。

C#

1 protected override async Task OnInitializeAsync(IActivatedEventArgs args) 2 { 3 await base.OnInitializeAsync(args); 4 5 // We are remapping the default ViewNamePage and ViewNamePageViewModel naming to ViewNamePage and ViewNameViewModel to 6 // gain better code reuse with other frameworks and pages within Windows Template Studio 7 ViewModelLocationProvider.SetDefaultViewTypeToViewModelTypeResolver((viewType) => 8 { 9 var viewModelTypeName = string.Format(CultureInfo.InvariantCulture, "LearningAlbum.ViewModels.{0}ViewModel, LearningAlbum", viewType.Name.Substring(0, viewType.Name.Length - 4)); 10 return Type.GetType(viewModelTypeName); 11 }); 12 }

理由としては、ここで、ViewModelの紐づけを行っているように見えるからです。
→すみません、深く理解ができていないため、間違いなどありましたら、ご指摘お願いいたします。
よろしくお願いいたします!

全然ググっても出てこなかったので、皆さんの一助になれば幸いです。
よろしくお願いいたします。

投稿2019/09/16 22:14

編集2019/09/25 13:38
heroherohero

総合スコア38

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

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

heroherohero

2019/09/25 13:42

そして、もう一点大切なことがあります。 Windows10 のOSのバージョンが、バージョン1803だと、プログラムから開くで、アプリを起動しようとすると白い画面が出てアプリが止まってしまいますので、ご注意ください。 こちらに関しては、バージョンを1903にバージョンアップすると、解決できます。 よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問