2

モーダル ダイアログ ボックスがあり、(ユーザーが [OK] ボタンを押したときに) それを非表示にし、別のモーダル ダイアログ ボックス (MessageBox など) を表示してから、もう一度表示したいと考えています。私の問題は、ダイアログが非表示になっている場合、その DialogResult がfalse取得され、ボタンのハンドラーメソッドが終了した直後に閉じられることです。代わりに Opacity を 0 に設定しようとしましHide()たが、まったく機能しません (まだ表示されています)。

モーダル ダイアログ ボックスを閉じに一時的に非表示にする方法はありますか?

4

3 に答える 3

1

私のために働いている回避策:

DialogResult を設定した後にウィンドウが閉じられないようにするには、代わりに独自の DialogResult を作成します。

public new bool DialogResult;

これで、引き続き変数を設定して、Close() の代わりに Hide() を選択できます。DialogResult が設定されているすべての場所に

隠れる();

だから私はこのように見えます:

DialogResult=true;
Hide(); 

また

DialogResult=false;
Hide(); 

そうすれば、新しい ShowDialog() をもう一度実行できます。

したがって、コンテンツが正しくなるまでウィンドウを再度開く必要がある場合 (閉じた後に検証が行われる場合)、次のようになります。

    public void ShowDialog()
    {
        var dialog = new MyDialog();
        bool ok = false;
        while (!ok)
        {
            dialog.ShowDialog();
            if (dialog.DialogResult)
            {
                ok = DoSomeValidation();
            }
            else
            {
                ok = true;
            }
        }
    }
于 2015-12-03T12:52:35.747 に答える
0

わかりました、不透明度は機能しています。完成したアニメーション (HoldEnd 動作を使用) によってブロックされただけで、それについて知りませんでした。したがって、誰かが同じ問題を抱えていて、モーダル ウィンドウを非表示にする必要がある場合Opacity = 0;は、これが解決策です。

于 2014-11-20T10:49:09.410 に答える
0

これは結果を処理しませんが、ページからデータを返す方法を確認します
PageModal はページ
です モーダル部分には NavigationWindow を使用します

public partial class MainWindow : Window
{
    private PageModal pageModal = new PageModal();
    public MainWindow()
    {
        InitializeComponent();
    }

    private void btnLaunchModal(object sender, RoutedEventArgs e)
    {
        NavigationWindow navWindow = new NavigationWindow();
        navWindow.Content = pageModal;
        navWindow.ShowDialog();
    }
}
于 2014-11-18T18:42:03.197 に答える