1

모바일하지만 오류가 제대로 작동(UWP) 하드웨어 돌아 가기를 눌러 내 UWP 응용 프로그램에서 PC

private async void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e) 
     { 

      e.Handled = true; 
      Frame rootFrame = Window.Current.Content as Frame; 
      if (rootFrame.CanGoBack && rootFrame != null) 
      { 

       rootFrame.GoBack(); 
      } 
      else 
      { 
       var msg = new MessageDialog("Confirm Close! \nOr Press Refresh Button to Go Back"); 
       var okBtn = new UICommand("OK"); 
       var cancelBtn = new UICommand("Cancel"); 
       msg.Commands.Add(okBtn); 
       msg.Commands.Add(cancelBtn); 
       IUICommand result = await msg.ShowAsync(); 

       if (result != null && result.Label == "OK") 
       { 
        Application.Current.Exit(); 
       } 
      } 
     } 

및 내가 전화에 응용 프로그램을 디버깅 할 때이 모든 코드를 완료 한 후

public App() 
    {    
     this.InitializeComponent(); 
     this.Suspending += OnSuspending; 

    /* Because of this line my app work on mobile great but when 
     when i debug on pc it through exception "show in image" */ 
     HardwareButtons.BackPressed += HardwareButtons_BackPressed; 
    } 

, 응용 프로그램은 성공적으로 실행 - 모바일 Debuging을 :

enter image description here

그러나 같은 코드를 PC에 디버그,이 오류 - PC의 Debuging 올라올 때 : i가 작동하지 않는 버튼을 다시 돌아 debuging 해결 PC의 디버깅하지만 모바일에서 다음 문제를 HardwareButtons.BackPressed += HardwareButtons_BackPressed;을 제거 할 때

enter image description here

합니다.

+0

'SystemNavigationManager.GetForCurrentView()를 시도해 볼 수 있습니까? BackRequested + = OnBackRequested; SystemNavigationManager.GetForCurrentView(). AppViewBackButtonVisibility = AppViewBackButtonVisibility입니다."HardwareButtons.BackPressed"대신 Visible;' – Developer

+0

내 문제는 여전히 동일합니다. 모바일과 PC 모두에서 다시 예외가 발생합니다. https://1drv.ms/이 있으면 내 app.xaml.cs 파일에 대한 링크입니다. u/s! Ahppl6XCmlXfj_VUrekI819VqZLG-Q –

답변

1

이유는 HardwareButtons API가 뒤로 버튼을 처리하기위한 보편적 인 솔루션이 아니기 때문입니다. 이 API는 모바일 확장 SDK에서만 사용할 수 있으며 형식을 사용할 수 없기 때문에 다른 SKU에서 호출하려고하면이 예외가 발생합니다.

모든 시스템에서 동일한 기능을 사용하려면, 당신은 새로운 보편적 뒤로 버튼 이벤트 사용해야합니다 :

SystemNavigationManager.GetForCurrentView().BackRequested += BackButtonHandler; 

이 전화, PC, 태블릿, X 박스 하나, 표면 허브에서 동일하게 작동을하고 HoloLens.

이 단추는 기본적으로 표시되지 않으므로 수동으로 표시하거나 직접 만들면됩니다. , 창의 제목 표시 줄에서 뒤로 단추를 표시하려면 사용

SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = 
    AppViewBackButtonVisibility.Visible; 

당신이이 경우에 버튼이 더 이상 유용하기 때문에이 버튼을 한 번 Frame.CanGoBack은 거짓입니다 숨길 것이 좋습니다. 프레임을 탐색 할 때마다이 작업을 수행해야합니다.

Frame rootFrame = Window.Current.Content as Frame; 
rootFrame.Navigated += UpdateAppViewBackButton; 

지금 핸들러는 다음과 같이 수 :

private void UpdateAppViewBackButton(object sender, NavigationEventArgs e) 
{ 
    Frame frame = (Frame) sender; 
    var systemNavigationManager = SystemNavigationManager.GetForCurrentView(); 
    systemNavigationManager.AppViewBackButtonVisibility = 
     frame.CanGoBack ? AppViewBackButtonVisibility.Visible : 
          AppViewBackButtonVisibility.Collapsed; 
} 

나는 또한 나타났습니다

가까운 응용 프로그램에 App.xaml.cs의 루트 프레임을 설정할 때이 작업을 수행하는 가장 좋은 장소입니다 Application.Current.Exit();을 사용하여 앱을 종료합니다. 그러나 이것은 권장되지 않습니다. 사용자가 대화 상자에서 확인을 선택하면 e.Handled = false을 설정하고 시스템에서 수동으로 앱을 종료하도록 처리해야합니다. 이렇게하면 앱 일시 중지가 예상대로 실행되며 앱에 충분한 리소스가 있고 앱이 다시 빠르게 실행되면 앱이 메모리에 남아있게됩니다. Application.Current.Exit()은 응용 프로그램을 종료하므로 UWP 응용 프로그램에는 권장되지 않습니다.

기억해야 할 점 중 하나는 데스크톱에서 현재 앱의 제목 표시 줄에있는 닫기 버튼을 클릭하는 방법이 없기 때문에 불행히도 확인 대화 상자가 표시되지 않는다는 것입니다.

+0

내 문제는 여전히 모바일과 PC에서 모두 예외입니다. https://1drv.ms/u/s가 있으면 내 app.xaml.cs 파일에 대한 링크입니다. ! Ahppl6XCmlXfj_VUrekI819VqZLG-Q –

+0

VS로 제공 한 코드를 복사하여 붙여 넣었으므로 PC 나 전화에서 아무 것도 작동하지 않습니다. 언제 UpdateAppViewBackButton 메서드를 사용합니까? 그것은 코드의 어디서나 참조되는 것 같지 않습니다. –

+0

언제 응용 프로그램이 언제 추락합니까 (어떤 예외 및 어떤 행을 사용합니까)? –