2009-04-18 5 views
2

Ich entwerfe ein Benutzersteuerelement in sliverlight, das von Canvas erbt. Es ist für mich notwendig, herauszufinden, wenn eine neue UIElement Children Eigenschaft von MyBase hinzugefügt wird, aber es gibt kein Ereignis wie "ItemAdded". Da ich die Kinder meiner Leinwand animieren möchte, kann ich das Ereignis LayoutUpdated nicht verwenden (Es wird eine Million Mal getroffen).Wie kann ich herausfinden, wenn ein neues UIElement in Silverlight hinzugefügt wird

Antwort

1

Wenn ein Kind hinzugefügt/entfernt wird, wird die Canvas automatisch ungültig gemacht, so dass ein Measure/Arrange-Zyklus auftritt. Sie müssen also die Vorgänge zum Hinzufügen/Entfernen nicht explizit nachverfolgen.

Stattdessen müssen Sie nur die MeasureOverride-Methode überschreiben, und dann können Sie innerhalb der Methode die Gruppe der untergeordneten Elemente betrachten und feststellen, was sich geändert hat. Dies ist ein Bereich, in dem Silverlight viel schwieriger zu verwenden ist als WPF. Sie können keine eigene Sammlung zum Speichern von Kindern wie WPF bereitstellen und können das Ereignis nicht in der vorhandenen Children-Sammlung verankern.

0

Beachten Sie, dass ich keine Silverlight-Erfahrung habe, aber in WPF können Sie die geladenen und initialisierten Ereignisse auf einem Steuerelement verwenden.

Weitere Informationen über a blog from Mike Hillberg from MSDN

Initialized Ereignis

Die Initialized Ereignis normalerweise ausgelöst , wenn die Eigenschaften eines Elements haben alle eingestellt. Insbesondere Framework/Framework implementieren ISupportInitialize, und wenn die EndInit Methode dieser Schnittstelle genannt wird, die IsInitialized Eigenschaft auf true gesetzt ist, und der initialisierte Ereignis ausgelöst wird.

Loaded Ereignis

Die Loaded-Ereignis ausgelöst wird, wenn ein Element nicht nur initialisiert, aber es ist über gerendert werden. Die Motivation für das Loaded-Ereignis ist das typische Szenario, in dem Sie in Ihrer Anwendung unter Initialisierungszeit laden möchten.