WPF usercontrol проблема showdialog - PullRequest
0 голосов
/ 02 октября 2010

Существует MainWindow, usercontrol, который находится в моем MainWindow, и OtherForm, который я собираюсь показать из usercontrol.Я отправил OtherForm в качестве параметра из MainWindow в usercontrol.И в usercontrol я звоню OtherForm.showdialog.Когда я показываю его во второй раз, я получаю сообщение «Невозможно установить Visibility или вызвать Show, ShowDialog или WindowInteropHelper.EnsureHandle после закрытия окна».

Код

В классе MainWindow

void Example()
{
   usercontrol.Load(new Otherform{ variable= 1 });
}

В классе Usercontrol

private Window _form;
public void Load(window form)
{
    _form=form;
}

void ExampleInUSerControl
{
   _form.VerifyAccess();
   _form.Activate();
   _form.ShowActivated = true;
   _form.ShowDialog();
}

1 Ответ

2 голосов
/ 02 октября 2010

Сообщение об ошибке в этом случае довольно точно: как только окно закрыто, оно закрывается навсегда. Поскольку ShowDialog() всегда закрывает окно, вам нужно создавать новый экземпляр окна каждый раз, когда вы вызываете ShowDialog().

Один довольно простой способ сделать это в вашем примере - это получить для события Load аргумент типа Func<Window>:

В главном окне:

private Window MakeWindow()
{
   return new MyWindow();
}

private void Example()
{
   usercontrol.Load(MakeWindow);
}

В пользовательском управлении:

public void Load(Func<T> makeWindow)
{
   _form = makeWindow();
   ...
}

Заметьте, кстати, что не должно быть никаких причин для вызова Activate или установка ShowActivated - ShowDialog сделает все это. И я не знаю, почему бы тебе позвонить VerifyAccess.

...