FrameworkElement.Loaded イベント

定義

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"/>
 

イベントの種類

RoutedEventHandler

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 コントロールを表示する前に、アプリ コードで要素ツリー構造を操作するために推奨されるオブジェクト有効期間イベントです。 初期レイアウトでも発生する他のイベントがない場合は、Loaded ハンドラーから VisualStateManager.GoToState メソッドを呼び出して、テンプレートで定義されている初期ビューステートを設定することも適切です (SizeChanged は初期レイアウトで発生します)。

Windows ランタイム実装で読み込まれるタイミングは、Windows Presentation Foundation (WPF) 実装でのタイミングと似ています。 これに対し、Microsoft Silverlight の実装には、読み込まれたときに読み込まれるテンプレートに依存できないタイミングの問題があります。 これらの XAML フレームワークから XAML または分離コードを移行する場合は、読み込まれたハンドラーで実行する処理を調整して、Windows ランタイム実装のテンプレート読み込みタイミングに適している場合があります。

適用されたテンプレートから取得した項目にアクセスするには、 VisualTreeHelper 静的メソッドを使用し、インデックスで子要素を移動します。 または、テンプレートコンテンツのルート要素で FindName メソッドを呼び出して、指定された x:Name 属性値 を持つテンプレートの特定の部分を見つけることができます。 オブジェクトがそのテンプレートに固有のテンプレートによって作成されるたびに XAML 名前スコープが作成されるため、コントロール自体ではなくテンプレート ルートで FindName を呼び出す必要があることに注意してください (詳細については、 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 イベント ハンドラーで要素の操作、状態の変更、イベントの配線などを実行します。

適用対象

こちらもご覧ください