2 votes

Comment écouter les événements AffectsParentArrange lorsque vous n'êtes pas le parent ?

Il existe un attribut "AffectsParentArrange" qui invalide implicitement la disposition du parent - mais je veux attacher un gestionnaire d'événement à l'"événement" déclenché par cet attribut.

Lorsqu'une propriété enfant dotée de l'attribut change, l'arrangement du parent est invalidé.

J'ai un contrôle personnalisé (qui n'est pas le parent immédiat) qui doit recevoir un événement.

Quelqu'un connaît-il un événement qui pourrait être utilisé à cette fin ?

Dois-je fournir un parent personnalisé qui remplace une méthode et déclenche un événement ?

1voto

Ray Burns Points 38537

Il appelle simplement InvalidateArrange() sur le parent lorsque la propriété est modifiée. Cela conduit WPF à appeler ultérieurement Arrange() sur le parent. Aucun de ces appels n'a de moyen de l'intercepter (sans utiliser la fonction vraiment des techniques sournoises comme Parcheando le code IL ou l'attachement d'un débogueur au processus).

Cela signifie que les seules façons d'écrire du code géré qui peut détecter le InvalidateArrange() est de créer un parent personnalisé qui remplace l'élément ArrangeOverride ou exploiter certains comportements de la méthode Arrange pour le contrôle en question - par exemple, si le parent est un Panel vous pourriez ajouter un enfant invisible supplémentaire juste pour recevoir Arrange() de son parent.

Mise à jour Lorsque vous obtenez le rappel Arrange(), vous ne pouvez pas savoir pourquoi InvalidateArrange() a été appelé sur le parent, mais vous pouvez savoir si la propriété avec l'attribut AffectsParentArrange a changé ou non en sauvegardant l'ancienne valeur de la propriété à chaque fois qu'elle est modifiée. Arrange et la compare à la valeur précédemment enregistrée. Ceci peut être étendu à plusieurs propriétés en utilisant une boucle, un dictionnaire et une liste de propriétés ou un appel à GetLocalValueEnumerator() .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X