Pour être sûr, je voudrais vraiment question cette Best Practice. Cependant, si vous voulez vraiment faire cela, alors vous devez empêcher la fermeture de la fenêtre contenant le UserControl
.
La manière la plus simple de procéder est de définir un DependencyProperty
sur votre UserControl
qui est simplement un Boolean
indiquant si le conteneur peut être fermé. Vous ne définissez ce paramètre que lorsque vous voulez qu'il se ferme (vous avez probablement déjà un bouton ou quelque chose que vous utilisez maintenant pour fermer le contrôle).
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));
Puis, dans les fenêtres événement Closing
, vous vérifieraient pour cette propriété à définir à true
. Si ce n'est pas le cas, vous devez définir e.Cancel = true
;
En utilisant votre exemple:
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(); };
}
}
Je dois vous demander: pourquoi avez-vous besoin de faire cela? ALT + F4 a été une méthode établie de fermeture des applications tant que Windows a été autour. Je ne me considère pas comme une idée géniale pour supprimer cette option de l'utilisateur. Une meilleure idée, à mon avis, serait de s'assurer que votre application le gère avec élégance. –
Je n'ai besoin de le faire que dans un UserControl personnalisé, où je dois désactiver Esc et Alt + F4, afin que l'utilisateur ne soit pas en mesure de contourner le scénario de gestion. – Vytas999
Si j'étais votre utilisateur et que je n'aimerais pas terminer le scénario de l'entreprise, je tuerais le processus pour ne pas avoir à continuer :) – HCL