FrameworkElement.Loaded イベント
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
FrameworkElement が構築され、オブジェクト ツリーに追加され、操作の準備ができたときに発生します。
// Register
event_token Loaded(RoutedEventHandler const& handler) const;
// Revoke with event_token
void Loaded(event_token const* cookie) const;
// Revoke with event_revoker
FrameworkElement::Loaded_revoker Loaded(auto_revoke_t, RoutedEventHandler const& handler) const;
public event RoutedEventHandler Loaded;
function onLoaded(eventArgs) { /* Your code */ }
frameworkElement.addEventListener("loaded", onLoaded);
frameworkElement.removeEventListener("loaded", onLoaded);
- or -
frameworkElement.onloaded = onLoaded;
Public Custom Event Loaded As RoutedEventHandler
<frameworkElement Loaded="eventhandler"/>
イベントの種類
例
Loaded および Unloaded のハンドラーは、サポートのためにプロジェクト テンプレートの NavigationHelper クラスを使用するページに自動的にアタッチされます。 イベントの配線はコンストラクターで行われます。 ハンドラーはラムダを使用して記述され、ページ ナビゲーションでマウスまたはキーボード イベントを使用できるように、他のイベント ハンドラーをアタッチします。
this.Page.Loaded += (sender, e) =>
{
// Keyboard and mouse navigation only apply when occupying the entire window
if (this.Page.ActualHeight == Window.Current.Bounds.Height &&
this.Page.ActualWidth == Window.Current.Bounds.Width)
{
// Listen to the window directly so focus isn't required
Window.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated +=
CoreDispatcher_AcceleratorKeyActivated;
Window.Current.CoreWindow.PointerPressed +=
this.CoreWindow_PointerPressed;
}
};
Loaded イベントは、テーマ アニメーションやその他のトリガーに関連付けられていない装飾アニメーションを開始するのに適したタイミングです。 この例では、アニメーションストーリーボードで Begin を呼び出すメソッドに Loaded ハンドラーを結び付けることで、XAML で PointAnimation をトリガーする方法を示します。
<Canvas Width="450" Height="350">
<Canvas.Resources>
<Storyboard x:Name="myStoryboard">
<!-- Animate the center point of the ellipse from 100 X, 300 Y
to 400 X, 100 Y over 5 seconds. -->
<PointAnimation
Storyboard.TargetProperty="Center"
Storyboard.TargetName="MyAnimatedEllipseGeometry"
Duration="0:0:5"
From="100,300"
To="400,100"
RepeatBehavior="Forever" EnableDependentAnimation="True"/>
</Storyboard>
</Canvas.Resources>
<Path Fill="Blue" Loaded="Start_Animation">
<Path.Data>
<!-- Describes an ellipse. -->
<EllipseGeometry x:Name="MyAnimatedEllipseGeometry"
Center="200,100" RadiusX="15" RadiusY="15" />
</Path.Data>
</Path>
</Canvas>
// Start the animation when the object loads
void SampleApp::Page::Start_Animation(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
myStoryboard->Begin();
}
// Start the animation when the object loads
private void Start_Animation(object sender, RoutedEventArgs e)
{
myStoryboard.Begin();
}
' Start the animation when the object loads
Private Sub Start_Animation(ByVal sender As Object, ByVal e As EventArgs)
myStoryboard.Begin()
End Sub
注釈
このイベントは RoutedEventHandler デリゲートと RoutedEventArgs を イベント データとして使用しますが、イベントはルーティング イベントではありません。 これは、イベントを発生した要素 (つまり 、送信者) でのみ処理できます。 このイベントのイベント データ内の OriginalSource は常に null です。
読み込まれたオブジェクトの有効期間
Windows ランタイム実装では、Loaded イベントはコントロール テンプレートが適用された後に発生することが保証され、XAML テンプレートを適用して作成されたオブジェクトへの参照を取得できます。
Loaded イベントは、テンプレートから取得された要素にイベント ハンドラーをフックしたり、適用されたテンプレートの結果である子要素の存在に依存するロジックを呼び出したりするためのポイントとして使用できます。 Loaded は、UI の XAML コントロールを表示する前に、アプリ コードで要素ツリー構造を操作するために推奨されるオブジェクトの有効期間イベントです。 また、初期レイアウトでも発生する他のイベントがない場合 (SizeChanged は初期レイアウトで発生します)、テンプレートで定義されている初期ビューステートを設定するために、Loaded ハンドラーから VisualStateManager.GoToState メソッドを呼び出すのも適切です。
Windows ランタイム実装で読み込まれるタイミングは、Windows Presentation Foundation (WPF) 実装でのタイミングと似ています。 これに対し、Microsoft Silverlight の実装には、読み込まれたときに読み込まれるテンプレートに依存できないタイミングの問題があります。 これらの XAML フレームワークから XAML または分離コードを移行する場合は、読み込まれたハンドラーで実行する処理を、Windows ランタイム実装のテンプレート読み込みタイミングに適したものに調整することをお勧めします。
適用されたテンプレートから取得された項目にアクセスするには、 VisualTreeHelper 静的メソッドを使用し、インデックスによって子要素を移動できます。 または、テンプレートコンテンツのルート要素で FindName メソッドを呼び出して、指定された x:Name 属性値 を持つテンプレートの特定の部分を見つけることができます。 コントロール自体ではなく、テンプレート ルートで FindName を呼び出す必要があることに注意してください。これは、そのテンプレートに固有のテンプレートによってオブジェクトが作成されるたびに XAML 名前スコープが作成されるためです (詳細については、「 XAML 名前スコープ」を参照してください)。 テンプレート ルートにアクセスするには、 をtarget
使用VisualTreeHelper.GetChild(target,0)
して、 はテンプレートが適用されるオブジェクトです。 そのルートを取得したら、その後、名前付きパーツにアクセスできます。
インスタンスごとに Loaded を処理するのではなく、既存のコントロールから派生している場合は、 OnApplyTemplate をオーバーライドして、動作を既定のクラス動作の一部にすることができます。 OnApplyTemplate は、適用されたテンプレートからオブジェクトのツリーがあり、ビジュアルを調べたり調整したりするこの状況のコールバックとして特に意図されています。 これは、カスタム コントロールの動作の定義の重要な部分です。たとえば、開始ビジュアル状態の宣言や、 Onイベント オーバーライド パターンを使用して定義できないクラス ハンドラーの配線などのアクションが含まれます。 1 つの違いは、 OnApplyTemplate スコープから GetTemplateChild を使用して 、FindName ではなく名前付きパーツを検索する必要がある点です。
LayoutUpdated は関連するイベントです。 LayoutUpdated イベントは、コントロールを有効にするシーケンスの最後の "オブジェクトの有効期間" イベントであり、Loaded の後に発生します。 ただし、 LayoutUpdated は、ツリー内の連続する親だけでなく、レイアウト変更に関係するオブジェクトに対して発生します。 UI 内のいくつかのオブジェクトで LayoutUpdated が同時に発生する場合があります。 レイアウトの変更は、ユーザーがビューステートや画面解像度を変更したり、同じ UI またはレイアウト コンテナー内の他の要素のプログラムによるサイズ変更など、さまざまな理由で行われます。 このため、通常、Loaded は、初期レイアウトまたは適用されたテンプレートで動作するコードを実行する場合に適しています。
ページ間のナビゲーションを使用するアプリ コードでは、変換先ページのコントロールの要素操作または状態変更に Page.OnNavigatedTo を使用しないでください。 OnNavigatedTo 仮想メソッドは、テンプレートが読み込まれる前に呼び出されるため、テンプレートの要素はまだ使用できません。 代わりに、新しく読み込まれたページのコンテンツのルートに Loaded イベント ハンドラーをアタッチし、Loaded イベント ハンドラーで要素の操作、状態の変更、イベントの配線などを実行します。