1

私のUWPアプリでは、モバイルの戻るボタンをクリックするとアプリが閉じるので、このコードをapp.xaml.csに追加します

 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;
    }

電話でアプリをデバッグするときにこのコードをすべて実行した後、アプリは正常に実行されます-モバイルデバッグ:

ここに画像の説明を入力

しかし、同じコードで PC でデバッグすると、このエラーが表示されます - PC Debuging:

ここに画像の説明を入力

削除するHardwareButtons.BackPressed += HardwareButtons_BackPressed;と、PC デバッグの問題は解決しましたが、モバイル デバッグの [戻る] ボタンが再び機能しません。

4

1 に答える 1

1

その理由は、HardwareButtonsAPI が戻るボタンを処理するための普遍的なソリューションではないためです。この API はモバイル拡張 SDK でのみ使用できます。他の SKU で呼び出そうとすると、型が使用できないため、この例外が発生します。

すべてのシステムで同じ機能を有効にするには、新しいユニバーサル戻るボタン イベントを使用する必要があります。

SystemNavigationManager.GetForCurrentView().BackRequested += BackButtonHandler;

これは、電話、PC、タブレット、Xbox One、Surface Hub、および HoloLens で同じように機能します。

PC では、このボタンはデフォルトでは表示されないため、手動で表示するか、独自に作成する必要があります。ウィンドウのタイトル バーに [戻る] ボタンを表示するには、次を使用します。

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

このボタンを一度非表示にすることをお勧めしますFrame.CanGoBack。その場合、ボタンは役に立たなくなります。これは、フレームのナビゲーションごとに行う必要があります。これを行うのに最適な場所は、 でルート フレームをセットアップするときですApp.xaml.cs

 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;
}

申し込み終了時

Application.Current.Exit();また、アプリを終了するために使用していることにも気付きました。ただし、これは推奨されません。ユーザーがダイアログで [OK] を選択したら、代わりに を設定しe.Handled = false、システムがアプリを手動で閉じるようにする必要があります。これにより、アプリの一時停止が期待どおりに実行され、システムに十分なリソースがある場合はアプリがメモリ内に留まり、再び高速に起動するようになります。Application.Current.Exit()アプリケーションを強制終了するため、UWP アプリにはお勧めできません。

覚えておくべきことの 1 つは、デスクトップでは現在、ユーザーがアプリのタイトル バーの [閉じる] ボタンをクリックしているのをキャッチする方法がないため、残念ながらその場合は確認ダイアログが表示されないことです。

于 2016-09-01T06:28:55.630 に答える