クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
Web 開発
Silverlight
System.Windows 名前空間
FrameworkElement クラス
FrameworkElement イベント
 Loaded イベント
すべて縮小/すべて展開 すべて縮小
このページは次のバージョンについて記述しています。
Microsoft Silverlight 3

その他のバージョンについては、以下の情報を参照してください。
Silverlight 用 .NET Framework クラス ライブラリ
FrameworkElement..::.Loaded イベント

FrameworkElement が構築されてオブジェクト ツリーに追加されたときに発生します。

名前空間 :  System.Windows
アセンブリ :  System.Windows (System.Windows.dll 内)
Visual Basic (宣言)
Public Event Loaded As RoutedEventHandler
Visual Basic (使用法)
Dim instance As FrameworkElement
Dim handler As RoutedEventHandler

AddHandler instance.Loaded, handler
C#
public event RoutedEventHandler Loaded
XAML 属性の使用
<frameworkElement Loaded="eventhandler"/>

このイベントは RoutedEventHandler デリゲート型を使用しますが、イベントはルーティングされません (多くの Silverlight 入力イベントはルーティングされます)。ただし、通常、オブジェクト ツリーの XAML 読み込みの性質は、表面的にはバブル ルーティング イベント パターンに似たパターンを示します。読み込み前にオブジェクトですべてのプロパティを設定する必要があります。すべての XAML プロパティに値が指定されると、子を持たない最下位の入れ子のオブジェクトが最初に読み込まれます。子オブジェクトを持つオブジェクトでは、そのプロパティの 1 つは子を保持するプロパティです。したがって、オブジェクト ツリーの読み込み時に Loaded イベントは上方向への順に発生しますが、実際には、その順序で各オブジェクトの独自の Loaded イベントが発生します。イベント データは、さまざまな Loaded イベントで共有されません。これらは、個別のオブジェクト ソースごとに個別に発生したイベントです。

メモメモ :

上の説明には例外があり、Loaded イベントがツリーとは逆順で発生する場合があります。たとえば、ItemsControl 内のアイテムに対するテンプレート適用とデータ表示の規則により、Loaded が、それらの親の ItemsControl よりも後で発生する場合があります。したがって、Loaded の順序だけを判断基準とするようなアプリケーション ロジックは避けてください。

Silverlight には、WPF イベント Initialized に相当するイベントはありません。

レイアウトによってサイズが変更されても、通常、オブジェクトの再読み込みは行われません。詳細については、SizeChanged のトピックを参照してください。

Loaded と制御オブジェクトの有効期間

Silverlight での Loaded イベントのタイミングは、WPF での FrameworkElement.Loaded イベントのタイミングと異なります。具体的には、WPF の Loaded イベントはテンプレートの適用後に発生します。Silverlight では、Loaded イベントがテンプレートの適用後に発生することは保証されません。これは、Loaded イベントを使用してビジュアル ツリーを調べる一般的な制御シナリオで、問題となる可能性があります。たとえば、何か別のもののソースとして値を取得する場合や、または、新しい値が実行時にしかわからない状況で、テンプレート化された構成内の値を変更する場合です。そのような場合、テンプレート コンテンツのビジュアル ツリーを調べるための Silverlight の VisualTreeHelper メソッドの呼び出しは、Loaded ハンドラーから直接呼び出した場合には機能しない可能性があります。

この問題を回避するには、いくつかの方法があります。各方法には、それぞれ利点および制限があります。

  • Loaded に対してハンドラーを追加する代わりに、既存のコントロールから派生している場合は、OnApplyTemplate をオーバーライドできます。OnApplyTemplate は、テンプレートからツリーが取得され、そのビジュアル要素を調べたり調整したりする必要がある状況のために、特にコールバックとして用意されているものです。制限として、単に既存のコントロールをアプリケーションの一部として使用している場合には、OnApplyTemplate に関して何も変更を加えることができません。

  • 引き続き、Loaded を使用することもできます。ただし、Loaded ハンドラー内の最初の呼び出しとして、そのコントロールに対して ApplyTemplate を呼び出す必要があります。ApplyTemplate は同期メソッドであるため、その呼び出しが行われて完了すると、テンプレートで作成したビジュアル ツリーが生成されています。この場合に ApplyTemplate を呼び出しても、Silverlight ランタイムの側で動作が重複することはありません。制限として、該当する要素は Control の派生クラスである必要があります。

  • Loaded の代わりに LayoutUpdated を処理できます。LayoutUpdated は、Silverlight UI でコントロールを有効にするためのシーケンスで、最後に発生する "オブジェクト有効期間" イベントです。LayoutUpdated の主要な制限は、LayoutUpdated が発生するのが、初期化時だけではない可能性があることです。また、LayoutUpdated は、レイアウト変更に関係するオブジェクトに対してのみ発生します。たとえば、レイアウト内のピアは、サイズが変更されている可能性があります。ビジュアル ツリーの観点で見ると、ピア オブジェクトではいくつかのプロパティ値が変更されただけでツリー構造は変わっていない可能性があり、また、LayoutUpdated の処理対象のオブジェクトのビジュアル ツリーはまったく変更されていない可能性があります。したがって、LayoutUpdated イベントが発生したときに、ビジュアル ツリーの調査や再確認が本当に必要なのかどうかを判断するには、独自のロジックの適用が必要となる可能性があります。

テンプレートの適用タイミングの問題に影響を受けない Loaded の処理シナリオもあることに注意してください。たとえば、テンプレート パーツにアクセスできない場合でも、Loaded が発生したオブジェクトに対してイベント ハンドラーを追加したりプロパティを設定したりすることはできます。たとえば、コードでオブジェクトを作成し、この時点でコンテンツ プロパティまたはコンテンツ コレクションに追加したり、初期の XAML でフックしないことを選択した入力型イベント ハンドラーを追加したりできます。

Silverlight でサポートされるオペレーティング システムの詳細については、サポートされているオペレーティング システムとブラウザー の「サポートされるオペレーティング システムとブラウザー」を参照してください。

コミュニティ コンテンツ   コミュニティ コンテンツとは
新しいコンテンツの追加 RSS  注釈
Processing
© 2010 Microsoft Corporation. All rights reserved. 使用条件 | 商標 | プライバシー
Page view tracker