8
votes

Dans WPF, est-il un moyen d'exécuter du code avant que le contrôle ne soit déchargé ...? Comme peut-être un événement de déchargement?

J'ai besoin d'exécuter du code avant qu'un contrôle de l'utilisateur WPF soit déchargé et annuler le déchargement si certaines conditions sont remplies et maintiennent le contrôle ouvert dans son état actuel dans l'interface utilisateur ...

Y a-t-il quelque chose que je peux accomplir cela? Je ne pouvais rien voir comme un événement de déchargement? Merci


2 commentaires

Quel est votre cas d'utilisation pour cela? On dirait que vous voulez quelque chose qui fonctionne comme la fenêtre.Flèvement, ce qui est beaucoup différent de l'annulation d'un événement de frameworkElement.unloaded. Il peut y avoir beaucoup à se produire autour de la mise en page des parents et des frères et sœurs lorsqu'un élément est déchargé.


J'ai un problème similaire, juste au cas où vous pouvez m'aider Stackoverflow.com / Questions / 5310724 / ...


3 Réponses :


0
votes

Il y a un événement non chargé sur system.windows.controls.control, mais je ne connais pas un moyen élégant d'arrêter de décharger le contrôle avec elle.


2 commentaires

oui..Je connaissez l'événement non chargé mais en fonction de certaines conditions, j'ai besoin de l'arrêter d'être déchargé ...


Cela doit-il être un UserControl? Ou pouvez-vous utiliser une boîte de dialogue modale qui ne ferme pas si certaines conditions ne sont pas remplies?



5
votes

non chargé est tiré lorsque la commande est retirée de l'arborescence visuelle WPF. Autant que j'ai pu lire il n'y a pas d'événement "déchargement" car il y a, je pense, sous Windows Forms. Mais "non chargé" ne signifie pas que le contrôle est détruit, juste qu'il est retiré de l'arbre visuel.

Gardez une référence à la commande dans un endroit séparé dans votre code, avec un peu de métadonnées à propos de sa commande parent. Vous pouvez probablement collecter ces métadonnées en stockant une référence à la propriété parent dans votre gestionnaire d'événements initialisé .

Ensuite, lorsque non chargé est appelé, appelle vos tests dans le gestionnaire d'événements non chargé (code> non chargé et si vos conditions sont remplies, réinsérez la commande dans l'arborescence logique. La classe contentControl a une méthode protégée explicite AddChild .

Il y a probablement des effets secondaires pour faire attention; Selon la documentation, non chargé est appelé lorsque des thèmes sont modifiés au niveau du système d'exploitation, lorsque l'arborescence visuelle du WPF se reconstitue.


0 commentaires

-1
votes
private void UserControl_Unloaded(object sender, RoutedEventArgs e)
{
     if (ConditionsMet) { e.Handled = true; }
}
If ConditionsMet the Unloaded event will be set to true henceforth keeping your control in the VisualTree - your control does not Unload

1 commentaires

Cela ne fonctionne pas dans mes tests. E.Handled = true; semble être ignoré.