Je suis en train de concevoir un contrôle utilisateur dans sliverlight qui hérite de canvas. Il est nécessaire pour moi de savoir quand un nouveau UIElement
est ajouté à la propriété Children de MyBase mais il n'y a aucun événement comme "ItemAdded". Puisque je veux animer les enfants de ma toile, je ne peux pas utiliser l'événement LayoutUpdated
(il est touché un million de fois).Comment puis-je savoir quand un nouvel UIElement est ajouté dans Silverlight?
Répondre
Lorsqu'un enfant est ajouté/supprimé le Canvas
il sera automatiquement invalidé de sorte qu'un cycle Mesurer/Arranger se produise. Vous n'avez donc pas besoin de suivre explicitement les opérations d'ajout/suppression. A la place, il suffit de remplacer la méthode MeasureOverride, puis à l'intérieur de la méthode, vous pouvez regarder l'ensemble des enfants et remarquer ce qui a changé. C'est un domaine que Silverlight est beaucoup plus difficile à utiliser que WPF. Vous ne pouvez pas fournir votre propre collection pour stocker des enfants comme WPF et ne pouvez pas connecter un événement à la collection Children existante.
Notez que je n'ai pas d'expérience Silverlight, mais dans WPF, vous pouvez utiliser les événements Loaded et Initialized sur un contrôle.
Plus d'info sur a blog from Mike Hillberg from MSDN
événement initialized
L'événement Initialized déclenche généralement lorsque les propriétés d'un élément ont tous été définis. Plus précisément, FrameworkElement/FrameworkContentElement mettre en œuvre ISupportInitialize, et quand la méthode EndInit de cette interface est appelée, la propriété IsInitialized est à true, et l'événement Initialisé est déclenché.
événement Loaded
L'événement se déclenche lorsqu'un élément Loaded est non seulement initialisés, mais il est sur le point d'être rendu. La motivation pour l'événement Loaded est le scénario typique où vous souhaitez effectuer une initialisation dans votre application au .