Je sais que lorsque vous enregistrez un objet dans les événements attachés de la souris, vous avez des fuites de mémoire. C'est pourquoi vous devez utiliser WeakEvent pattern.Comment les contrôles WPF intégrés gèrent-ils leurs gestionnaires d'événements dans un événement attaché?
J'ai un problème avec ce modèle: Si vous voulez l'utiliser, vous ne pouvez pas définir votre gestionnaire dans le code XAML.
Pour moi, cela signifie que chaque code comme ceci fuites:
<SomeControl Mouse.MouseDown="MyHandler" />
Sauf si vous supprimez votre gestionnaire explicitement dans le code (et je doute que tout le monde fait ça). Maintenant, il y a quelque chose que je ne comprends pas:
<Button Click="MyHandler" />
Ce code utilise une certaine façon quelque part l'événement Mouse.MouseDown pour détecter un clic sur le bouton. Avec quelques recherches avec réflecteur, j'ai trouvé que cet événement utilise MouseDown de la classe UIElement. Et quand je lis le code de UIElement je ne comprends pas: il n'y a pas de WeakEventManager!
Quelqu'un peut-il m'expliquer comment UIElement reçoit des événements de Mouse.MouseDown sans fuite?
Je suis d'accord avec vous, cependant le gestionnaire en XAML à un événement attaché (je ne parle pas des événements des contrôles mais des événements comme Mouse.MouseDown) peut fuir, car il y a toujours une référence dessus. En interne, la classe Button utilise les événements Mouse.MouseDown (UIElement pour être spécifique) .Et je ne sais pas pourquoi cela ne fuit pas. –
Bon point. Les événements attachés sont des références externes. –