2017-02-07 4 views
0

내 Windows 10 UWP 앱에서 내비게이션 햄버거 메뉴로 MainPage를 사용합니다. 다른 모든 페이지는 MyFrame이라는 MainPage의 프레임으로로드됩니다. 다음 코드를 사용하면이 프레임 내의 뒤로 탐색이 완벽하게 작동합니다.프레임의 웹보기에서 뒤로 탐색이 가능합니까?

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

그러나 이러한 페이지 중 하나에는 WebView가 포함되어 있습니다. 이 페이지가로드되면 GoBack 이벤트를 수행하기 위해 프레임 대신 웹보기를 원합니다.

어떻게하면 WebView의 CanGoBack 속성에 MainPage에서 액세스 할 수 있습니까?

편집 : 아마도이 기능이 작동할까요?

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

일반적으로 Back 이벤트에서 WebView를 열었다는 사실을 인식해야합니다. 플래그 또는 다른 구독으로 이벤트를 처리하고 e.Handled를 true로 설정 한 다음 다른 이벤트에서 이미 처리되었는지 확인해야합니다. 또한 WebView 페이지를 떠나면 다시 동작을 변경해야합니다. – Romasz

+0

WebView가 포함 된 페이지를 "웹"이라고합니다. 나는 어쩌면이 같은과 함께 MyFrame.GoBack 이벤트를이 표시되지 않도록 있습니다 개인 무효 MainPage_BackRequested (개체를 보낸 사람, BackRequestedEventArgs 전자) { (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(); 
      } 
     } 
    } 
} 

, 당신은 당신의 MyFrame

행운에로드 이전 페이지로 돌아갈 수 없습니다.

+1

대단하군요! 고마워요, 내가 찾던 것을 exacly thats! :) – Sebastian

+0

@Sebastian, 도움이 되었다면 답으로 표시해주세요. – AVK