2017-02-07 5 views
0

私のWindows 10 UWPアプリケーションでは、ナビゲーションハンバーガーメニューにMainPageを使用しています。他のすべてのページは、MyFrameというMainPageのフレームに読み込まれます。次のコードでは、このフレーム内のバックナビゲーションは完璧に動作します:フレーム内のwebviewのナビゲーションは可能ですか?

private void MainPage_BackRequested(object sender, BackRequestedEventArgs e) 
{ 
    if (MyFrame.CanGoBack) 
    { 
     MyFrame.GoBack(); 
     e.Handled = true; 
    } 
} 

は、しかし、それらのページの1がWebViewのが含まれています。このページが読み込まれると、GoBackイベントを実行するためにフレームの代わりにWebviewが必要になります。

WebViewのCanGoBackプロパティにMainPageからアクセスできますか?

編集:maybe works like this?

private void MainPage_BackRequested(object sender, BackRequestedEventArgs e) 
    { 
     if (MyFrame.Content == typeof(Web)) 
     { 
      get state of the Webview "SearchURI" here and handle the GoBack event 
     } 
     else if (MyFrame.CanGoBack) 
     { 
      MyFrame.GoBack(); 
      e.Handled = true; 
     } 
    } 
+0

可能です。バックプレスされたイベントはアプリ全体に適用されます。したがって、これは購読方法によって異なります。あなたはこのイベントにどのようにそしてどこで購読するのですか? – Romasz

+0

通常、バックイベントでWebViewを開いたことを認識する必要があります。フラグまたは他のサブスクリプションでイベントを認識し、e.Handledをtrueに設定し、それ以外のイベントですでに処理されているかどうかを確認する必要があります。また、WebViewページを離れると、動作を元に戻すことを忘れないでください。 – Romasz

+0

WebViewを含むページは「Web」と呼ばれます。私は多分、このようなもので、MyFrame.GoBackイベントをSUPRESSする必要があります。 ます。private void MainPage_BackRequested(オブジェクト送信者、BackRequestedEventArgs E) { (MyFrame.Content == typeof演算(ウェブ)) { 内部のナビゲーションをバック行う場合WebView "SearchURI"ここに } else if(MyFrame.CanGoBack) { MyFrame.GoBack(); e.Handled = true; } } – Sebastian

答えて

0

WebViewすでにCanGoBack財産、あなたが使用するGoBackの方法があります。これらの方法を使用すると、BackButtonを使用してバックキープロセスを制御できます。

以下は私がそれを行う方法です。あなたのWeb.xaml.cs

public WebView myWebView { get; private set; } 

し、ページのコンストラクタでパブリック変数を宣言し、この変数に実際のWebView参照を割り当てます。

public Web() 
{ 
    this.InitializeComponent(); 
    myWebView = this.webView; 
} 

MainPage.xaml.csに、あなたがナビゲートするために使用するボタンは、OnnackRequestedは、以下のようなものが表示されます、あなたの今BackRequested

SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible; 
SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested; 

とを購読します。

private void OnBackRequested(object sender, BackRequestedEventArgs e) 
{ 
    if (MyFrame.Content.GetType() == typeof(Web)) 
    { 
     Web web = MyFrame.Content as Web; 
     if (web.myWebView.CanGoBack) 
     { 
      web.myWebView.GoBack(); 
     } 
     else 
     { 
      if (MyFrame.CanGoBack) 
      { 
       e.Handled = true; 
       MyFrame.GoBack(); 
      } 
     } 
    } 
} 

のWebViewが戻ってあなたの最初のページに移動しない限り、あなたが戻ってあなたのMyFrame

グッドラックにロードされる前のページに行くことはできません。

+1

これは素晴らしいことです!ありがとう、それは私が探していたことをexacly thats! :) – Sebastian

+0

@セバスチャン、これが助けられたら、それを答えとして記入してください。 – AVK

関連する問題