canvas から継承する sliverlight でユーザー コントロールを設計しています。MyBase の Children プロパティに新しいものがいつ追加されたかを調べる必要UIElement
がありますが、"ItemAdded" のようなイベントはありません。キャンバスの子をアニメーション化したいので、LayoutUpdated
イベントを使用できません(100万回ヒットします)。
2 に答える
子が追加/削除さCanvas
れると、自動的に無効になり、測定/配置サイクルが発生します。したがって、追加/削除操作を明示的に追跡する必要はありません。
代わりに、MeasureOverrideメソッドをオーバーライドする必要があります。その後、メソッド内で一連の子を確認し、何が変更されたかを確認できます。これは、SilverlightがWPFよりもはるかに使いにくい領域の1つです。WPFのように子を格納するための独自のコレクションを提供したり、既存のChildrenコレクションにイベントをフックしたりすることはできません。
Silverlight の経験はありませんが、WPF では、コントロールで Loaded イベントと Initialized イベントを使用できます。
詳細については、MSDN の Mike Hillberg のブログをご覧ください。
初期化されたイベント
通常、Initialized イベントは、要素のプロパティがすべて設定されたときに発生します。具体的には、FrameworkElement/FrameworkContentElement は ISupportInitialize を実装し、そのインターフェイスの EndInit メソッドが呼び出されると、IsInitialized プロパティが true に設定され、Initialized イベントが発生します。
ロードされたイベント
Loaded イベントは、要素が初期化されただけでなく、レンダリングされようとしているときに発生します。Loaded イベントの動機は、読み込み時にアプリケーションで何らかの初期化を行う典型的なシナリオです。