Конечно, я бы поставил под сомнение это как Лучшая практика . Однако, если вы действительно хотите это сделать, вам нужно предотвратить закрытие окна, содержащего UserControl
.
Самый простой способ сделать это - установить на вашем UserControl
значение DependencyProperty
, то есть просто Boolean
, указывающее, можно ли закрыть контейнер. Вы можете установить значение true только в том случае, если хотите, чтобы оно действительно закрывалось (возможно, у вас уже есть кнопка или что-то, что вы сейчас используете для закрытия элемента управления).
public Boolean AllowClose
{
get { return (Boolean)GetValue(AllowCloseProperty); }
set { SetValue(AllowCloseProperty, value); }
}
public static readonly DependencyProperty AllowCloseProperty =
DependencyProperty.Register("AllowClose", typeof(Boolean),
typeof(MyUserControl), new UIPropertyMetadata(false));
Затем в событии windows Closing
вы проверите, установлено ли для этого свойства значение true
. Если это не так, вы должны установить e.Cancel = true
;
Используя ваш пример:
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
if (! myUserControl.AllowClose)
{
MessageBox.Show("Even though most Windows allow Alt-F4 to close, I'm not letting you!");
e.Cancel = true;
}
else
{
//Content = null; // Remove child from parent - for reuse
this.RemoveLogicalChild(Content); //this works faster
base.OnClosing(e);
{ GC.Collect(); };
}
}