1

WP Toolkit の CustomMessageBox に問題があります。現在、ボタンを 2 回クリックするたびにアプリの評価を求めるプロンプトを起動するコードがあります。

Dispatcher.BeginInvoke(() =>
{
    if (rtcount == 2 && (AppSettings.ShowAgainSetting == 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 rate and review this application?",
            Message =
                "Thank you for using my app."
                + Environment.NewLine + Environment.NewLine
                + "If you've been enjoying the app we'd love if you could leave us a rating in the Store. Would you mind spending a couple of seconds to rate (and/or) review this application?",
            Content = checkBox,
            LeftButtonContent = "ok",
            RightButtonContent = "not now",
        };

        messageBox.Dismissed += (s1, e1) =>
        {
            switch (e1.Result)
            {
                case CustomMessageBoxResult.LeftButton:
                    if ((bool)checkBox.IsChecked)
                    {
                        MarketplaceReviewTask marketplaceReviewTask = new MarketplaceReviewTask();
                        marketplaceReviewTask.Show();
                        AppSettings.ShowAgainSetting = false;
                    }
                    else
                    {
                        MarketplaceReviewTask marketplaceReviewTask = new MarketplaceReviewTask();
                        marketplaceReviewTask.Show();
                    }
                    break;
                case CustomMessageBoxResult.RightButton:
                    if ((bool)checkBox.IsChecked)
                    {
                        AppSettings.ShowAgainSetting = false;
                    }
                    else
                    {
                    }
                    break;
                case CustomMessageBoxResult.None:
                    if ((bool)checkBox.IsChecked)
                    {
                        AppSettings.ShowAgainSetting = false;
                    }
                    else
                    {
                    }
                    break;
                default:
                    break;
            }
        };

        messageBox.Show();
        rtcount = 0;
    }
});

rtcount++;

実際に MarketplaceReviewTask を起動するオプションを除いて、すべてのオプションが正常に機能しているようです。タスクは正しく起動しますが、アプリを再開すると NullReferenceException が発生します。

{System.NullReferenceException: NullReferenceException at Microsoft.Phone.Controls.CustomMessageBox.ClosePopup(Boolean restoreOriginalValues) at Microsoft.Phone.Controls.CustomMessageBox.<>c_ DisplayClass4.b _1(Object s, EventArgs e) at Microsoft.Phone.Controls. MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex、文字列 eventName)}

どうすればこれを修正できますか? Coding4Fun ツールキットの MessagePrompt への変更は最後の手段です。

4

4 に答える 4

1

私はこれを理解することができず、更新をプッシュすることが非常に重要であるため、先に進んで、少し「だまされました」。私は例外を「処理」しました:

if (e.ExceptionObject.Message.ToString() == "NullReferenceException")
        {
            e.Handled = true;
            return;
        }

下にApplication_UnhandledException

誰かがこれに対するより良い修正を持っているなら、私はそれを聞きたいです.

于 2013-01-21T13:11:07.530 に答える
0

Dismissed問題はハンドラーにあると思います。がどのように実装されているかはわかりませんが、プロパティが nullCustomMessageBoxである可能性があります。checkBox

于 2013-01-21T07:57:17.433 に答える
0

同じ問題が発生しました。CustomMessageBox.cs にバグがありました。null のときに popup が呼び出されました。

private void ClosePopup(bool restoreOriginalValues)
{
    _popup.IsOpen = false;

最新バージョンhttp://phone.codeplex.comで修正されています

于 2013-10-08T17:28:05.210 に答える
0

却下されたイベントでブール値を使用して、どのボタンが押されたかを定義しました。次に、代わりに Unloaded イベントの却下イベントに実装するコードを実装しました。これで問題は解決したようです。

すなわち

        messageBox.Dismissed += (s1, e1) =>
        {
            switch (e1.Result)
            {
                case CustomMessageBoxResult.LeftButton:
                    {
                        delete = true ;
                    }
                    break;
                case CustomMessageBoxResult.RightButton:
                    break;
                case CustomMessageBoxResult.None:
                    break;
                default:
                    break;
            }
        };

        messageBox.Unloaded += (s1, e1) =>
        {
            if (delete)
                DeleteWorkout();
        };
于 2013-06-18T21:40:39.000 に答える