4

メインの WPF ウィンドウ mywindow.showDialog があり、ウィンドウでボタンをクリックするとコマンドが実行され、コマンドが SendToTableCommand であるとしましょう

protected virtual void SendToTableExecute(object o)
{
    UIThread.BeginInvoke(new Action<object>(SendToTableExecuteUI),o);
}

private void SendToTableExecuteUI(object o)
{
    if (o is Control)
    {
        m_OwningWindow = UIHelper.FindVisualParent<Window>((Control)o);
    }

    do sth...

    if (m_OwningWindow != null)
    {
        //only set DialogResult when window is ShowDialog before
        if(System.Windows.Interop.ComponentDispatcher.IsThreadModal)
            m_OwningWindow.DialogResult = true;
    }
}

少し前に、m_OwningWindow.DialogResult = true例外をスローします。そこで、IsThreadModal を使用する if チェックを追加しました。しばらく動いていましたが、IsThreadModal が false のため、m_OwningWindow が閉じなくなりました。

問題を解決する正しい方法がわからず、適切に処理しなかったと思います。助けてください。前もって感謝します

4

3 に答える 3

1

ジェイソンの返信は、回避策を思い起こさせます。つまり、Window.Close() を使用して、window にブール型のプロパティを追加します。window.OKClicked = true または false。window.DialogResult への参照を window.OKClicked に置き換えます。回避策に問題はありますか? ありがとう

于 2011-05-05T16:21:58.533 に答える
0

を割り当てる前にウィンドウを隠していDialogResultました。順序を入れ替えるとDialogResult、ウィンドウが非表示になる前に割り当てられ、問題が解決しました。ウィンドウがShowDialog'd' であっても、設定するには「開いている」と見なす必要がありますDialogResult

編集:ウィンドウは非表示ではなく、閉じる必要があります。投稿した後、それは私を苦しめました。

于 2015-09-14T17:01:26.033 に答える
-1

Form.Modalフォームがウィンドウとして開かれているのか、モーダルダイアログとして開かれているのかを判断するために使用します。

ダイアログであるかどうかに関係なく、フォームを閉じたいときにClose()できるはずです。(特定の状況下では、閉じた後に廃棄する必要がある場合もあります)

また、DialogResultは列挙型trueであり、割り当てられると予想される値ではありません。通常DialogResult.OK、またはDialogResult.Yesこれに使用されます。

于 2011-05-04T22:21:55.827 に答える