0

ユーザーが少なくとも 1 回はアプリを終了したときに、ユーザーの注意を引く必要があるアプリがあります。だから私はメッセージボックスを表示するために以下のコードを取得します。私が知らないのは、ユーザーがメッセージを読んだ場合にアプリを実際に終了するにはどうすればよいですか? バックキーイベントは常に呼び出しに来るように見えるので (OnBackKeyPress) または、BackKey のオーバーライドをいじらずにメッセージボックスの表示を処理する良い方法は何ですか? 画面に別のポップアップが表示され、ユーザーがバックキーを押した場合、自分でバックキーを処理しようとすると例外が発生したようです。

私の理想的な状況は、メッセージボックスの終了ボタンを押すとすぐにアプリが閉じることです。キャンセルを押すと、終了せずに戻ります。助けてください。ありがとう!

使っていたもの…でもうまく動かない

private void OnBackKeyPressed(object sender, CancelEventArgs e)
    {
        e.Cancel = true;

        CheckBox checkBox = new CheckBox()
        {
            Content = "Do not ask me again",
            Margin = new Thickness(0, 14, 0, -2)
        };

        TiltEffect.SetIsTiltEnabled(checkBox, true);

        CustomMessageBox messageBox = new CustomMessageBox()
        {
            Caption = "Would you like to stop and exit?",
            Message =
                "If you want to continue listen music while doing other stuff, please use Home key instead of Back key",
            Content = checkBox,
            LeftButtonContent = "Exit",
            RightButtonContent = "Cancel",
        };

        messageBox.Dismissed += (s1, e1) =>
        {
            switch (e1.Result)
            {
                case CustomMessageBoxResult.LeftButton: //Exit
                    return;// What to do here??
                case CustomMessageBoxResult.RightButton: //Cancel
                case CustomMessageBoxResult.None:
                    break;
                default:
                    break;
            }
        };
        messageBox.Show();
    }

}
4

5 に答える 5

3

「終了」と言うボタンが本当に必要な場合は、ColinEまたはPaulAnnettsソリューションのいずれかを使用する必要があります。個人的には、別の方法でメッセージを作成し、次のような通常のメッセージボックスを使用してみます。

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
   string caption = "Stop music and exit?";
   string message ="If you want to continue listen music while doing other stuff, please use Home key instead of Back key. Do you still want to exit?";
   e.Cancel = MessageBoxResult.Cancel == MessageBox.Show(message, caption, MessageBoxButton.OKCancel);

   base.OnBackKeyPress(e);
}

これによりメッセージボックスが表示されますが、代わりに[OK]ボタンと[キャンセル]ボタンが表示され、ユーザーが[OK]を押すと直接終了します。

And for the "Do not ask again", maybe add a settings on a setting page instead. And add a second dialog the first time the user choose between "Ok" and "Cancel" if he or she wants to see the dialog again.

于 2012-12-16T13:04:24.900 に答える
1

カスタムメッセージボックスを使用して同じことを行いました。次のようにコードを変更します。

messageBox.Dismissed += (s1, e1) =>
    {
       switch (e1.Result)
        {
            case CustomMessageBoxResult.LeftButton: //Exit
                App.Current.Terminate(); //Put this line followed by break
                break;
            case CustomMessageBoxResult.RightButton: //Cancel
                break;
            default:
                break;
        }
    };

ユーザーが[終了]を押すとアプリは終了します。閉じるを押すと、「左」ボタンのデフォルトのアクションはメッセージボックスを閉じることです。あなたがラインを置くならば、これはうまくいくはずです

break;

適切な場所で

お役に立てれば

于 2013-02-08T10:12:25.060 に答える
1

残念ながら、目的の結果を達成する良い方法はありません。Windows Phone では、アプリケーションをプログラムで終了することはできません。この場合、ほとんどの人が使用する解決策は、未処理の例外をスローすることです。以下を参照してください。

Windows phone 7 アプリを終了するには? アプリをプログラムで終了する方法はありますか? (Windows Phone 7)

于 2012-12-16T06:46:01.610 に答える
0

WP8 の場合Application.Current.Terminate()、アプリをプログラムで終了するために呼び出すことができます。WP7 の場合、これは利用できず、Colin が提供したオプションのいずれかを選択する必要があります。

ただし、このルートを使用する場合は、アプリが期待どおりに動作しない場合にアプリが拒否される可能性があるため、Microsoft Store の認定要件を満たすように注意する必要があります。

于 2012-12-16T08:01:32.510 に答える
0

最初に戻るキーが押されたイベントをキャンセルするだけで、メッセージ ボックスでクリックされたボタンに基づいて、次のように適切なアクションを実行できます。

private void BackKey_Pressed(object sender, System.ComponentModel.CancelEventArgs e)
{
        e.Cancel = true;
        MessageBoxResult messageBoxResult = MessageBox.Show("Text", "Caption", MessageBoxButton.OKCancel);
        if (messageBoxResult == MessageBoxResult.OK)
        {
            Application.Current.Terminate();
        }
}
于 2014-02-25T11:23:28.403 に答える