WPFで画面遷移したい

WPF+C#で同一ウィンドウ内で画面遷移したくて色々調べていたのですが、メインウィンドウにframe要素を配置してそこのプロパティを変更するという手法でいけそうでした。

で、親ウィンドウのframe.sourceプロパティを編集すれば変わりそう・・・だったので、まずstringを渡しましたがエラー。

エラーを見るとframe.sourceに渡せるのはuri、ということで、string→uriの変換方法を探してみます。

Uri.parce()を使えばいいと書かれていましたがどうも現在は使われていないらしい…

https://docs.microsoft.com/ja-jp/dotnet/api/system.uri.parse?view=netframework-4.8

普通に検索してると代替がなかなか見つからなくて困りましたが・・・リファレンスを見ると、

https://docs.microsoft.com/ja-jp/dotnet/api/system.uri?view=netframework-4.8

単純にUri(string,UriKind)で変換できました。リファレンスをまず確認すべきだった。

 

次に突き当たった問題は親ウィンドウ→子ページと参照していると、親のコントロールのプロパティを子が変更できない、というもの。

子ページ内のボタンをクリックすると親ウィンドウのframeのプロパティが書き換えられる、という動作を作りたい

 

子が新しく親のオブジェクトをnewか何かで宣言すると、その変更はできるんですがそれは親自体には何の影響も及ぼさないわけです。

(親→(子→(孫)))という構造で、括弧の外にでることができないわけです。

 

結局frame内に外部から参照可能な変数を定義し、その変数の変更を親ウィンドウが検知したときにframe.sourceを書き換えるという処理を行うという方法をとることに。

 

絶対もっとスマートな方法があるはずですが…とりあえず動く!