1

私のアプリケーションでは、Popup を使用して (背景色が異なる) カスタム メッセージ ボックスを作成しました。そこにはボタンがあり、ボタンクリックイベントを実装しました。

ボタンクリックでメッセージボックスがあり、「OK」か「キャンセル」でそこからの操作を行います。

問題は、ポップアップ(カスタムメッセージボックス)のボタンをクリックした後、メッセージボックスが読み込まれますが、それでもポップアップ(カスタムメッセージボックス)がバックグラウンドに表示されます。完全に閉じて操作を実行するには、カスタム ポップアップが必要です。したがってpopup.IsOpen = false;、ボタン クリック内の最初のステートメントとして使用しましたが、ボタン クリック イベント全体が完了するまでバックグラウンドで表示されます。他のプロパティを検索しましたが、機能するものが見つかりませんでした。

以下はコードです

        Popup popup = new Popup();
        popup.Height = 300;
        popup.Width = 480;
        popup.VerticalOffset = 100;
        CustomMessageBox control = new CustomMessageBox();
        popup.Child = control;

        popup.IsOpen = true;
        this.IsEnabled = false;

        control.OK_BTN.Click += (s, args) =>
        {
            popup.IsOpen = false;
            this.IsEnabled = true;

            MessageBoxResult result = MessageBox.Show("Do you want to reset the settings ?", "Settings", MessageBoxButton.OKCancel);

                if (result == MessageBoxResult.OK)
                {
                    changeSettings();
                }
        };

これを達成するための提案は高く評価されます。ありがとう...!!!

4

2 に答える 2

2

これが発生する理由は、戻るまでブロックされているUIスレッドでこれらすべてが発生しているためです。ボタンハンドラーが戻るまで、UIの更新は行われません。

本当に最初にポップアップを非表示にしたい場合は、次のようなことを行う必要があります。

        control.OK_BTN.Click += (s, args) =>
        {
            popup.IsOpen = false;
            this.IsEnabled = true;

            Dispatcher.BeginInvoke(() =>
                {
                    MessageBoxResult result = MessageBox.Show("Do you want to reset the settings ?", "Settings", MessageBoxButton.OKCancel);

                    if (result == MessageBoxResult.OK)
                    {
                        changeSettings();
                    }
                });
        };

これにより、ボタンハンドラーが戻った後にMessageBoxが強制的に開かれます。しかし、ポップアップを最初に非表示にしてよろしいですか?ユーザーがメッセージボックスで[キャンセル]をクリックするとどうなりますか?通常、メッセージボックスは、それを呼び出したものの真上に表示され、置き換えられません。

于 2012-08-06T20:59:47.087 に答える
1

ネガティブ・エディが書いたものをタイプしていました。

Dispatcher.BeginInvoke を使用すると機能します。私はそれをテストしました、完全に動作します。どうやら彼についてコメントするのに十分な担当者がいません。

于 2012-08-06T21:05:51.283 に答える