DialogResult может быть установлен только после того, как Окно создано и показано как диалог - PullRequest
4 голосов
/ 04 мая 2011

У меня есть главное окно 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 выдает исключение.Поэтому я добавил проверку if, которая использует IsThreadModal.Некоторое время он работал, но теперь m_OwningWindow не закрывается, потому что IsThreadModal имеет значение false.

Я не знаю, как правильно решить проблему, и думаю, что я не справился с этим должным образом.Пожалуйста помоги.заранее спасибо

Ответы [ 3 ]

1 голос
/ 05 мая 2011

Ответ Джейсона напоминает мне об обходном пути.то есть используя Window.Close (), затем добавьте свойство типа bool к окну, скажем OKClicked, замените любое место, которое устанавливает DialogResult, на window.Close ();window.OKClicked = true или false.заменить ссылку на window.DialogResult с window.OKClicked.Есть проблемы с обходным решением?спасибо

0 голосов
/ 14 сентября 2015

Я прятал свое окно перед назначением DialogResult. Поменяв местами порядок, поэтому DialogResult назначается до того, как окно скрыто, исправлена ​​моя проблема. Даже если окно было ShowDialog 'd, оно должно считаться открытым, чтобы установить DialogResult.

Редактировать : И окно должно быть закрыто, а не скрыто. Это укусило меня после того, как я написал.

0 голосов
/ 05 мая 2011

Используйте Form.Modal, чтобы определить, открывается ли ваша форма в виде окна или модального диалога.

Вы должны иметь возможность закрыть () форму, когда вы хотите, чтобы она закрылась, независимо от того, является ли это диалогом или нет. (При определенных обстоятельствах вам также может понадобиться утилизировать его после закрытия)

Кроме того, DialogResult является перечислимым типом - true не является значением, которое я ожидаю увидеть присвоенным ему. Обычно для этого используется DialogResult.OK или DialogResult.Yes.

...