Я хочу создать настраиваемое диалоговое окно импорта, и поэтому я создал окно с некоторыми вещами.Чтобы сделать этот диалог импорта модальным, я использую метод ShowDialog ().До сих пор все работает как положено.Мой код выглядит так:
var dialogresult = new MyImportDialog().ShowDialog();
if(dialogresult.HasValue && dialogresult.Value)
{
Console.WriteLine("Import");
}
Но когда я пытаюсь использовать это диалоговое окно дважды, получаю ArgumentException, потому что мои статические свойства DependencyProperties регистрируются во второй раз.Поэтому я попытался не удалять мой диалог импорта и использовать его во второй раз.
private MyImportDialog _myImportDialog;
private void OnImportClick(object sender, RoutedEventArgs e)
{
if (_myImportDialog== null)
_myImportDialog= new MyImportDialog ();
var dialogresult = _myImportDialog.ShowDialog();
if(dialogresult.HasValue && dialogresult.Value)
{
Console.WriteLine("Import");
}
}
Теперь я получил InvalidOperationException (Невозможно установить Visibility или вызвать Show, ShowDialog или WindowInteropHelper.EnsureHandle после закрытия окна.).Но у метода ShowDialog есть замечание: «Открывает окно и возвращает его только после закрытия вновь открытого окна».
Поэтому моей следующей идеей было зарегистрироваться для закрытия события в моем диалоге импорта, а затем отменить регистрацию моих DependecyProperties.,К сожалению, нет официального способа сделать это.Единственное, что я обнаружил, это: Есть ли способ отменить регистрацию свойства зависимостей WPF? .
Но решение (на мой взгляд) немного грязное, и автор предупредил, что нетиспользовать этот код в продуктивной среде.
Итак, есть ли другое более чистое решение, чтобы дважды использовать модальное окно?
Благодарю вас в ожидании.
Редактировать: Этот код показывает одно свойство зависимости, которое я использую:
public DependencyProperty ClearProperty =
DependencyProperty.Register("Clear", typeof (bool),
typeof (MyImportDialog),
new PropertyMetadata(true));
/// <summary>
/// Indicates whether view should be cleard before importing new image stack.
/// </summary>
public bool Clear {
get { return (bool) GetValue(ClearProperty); }
set { SetValue(ClearProperty, value);}
}