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

イベントの種類

および UnloadedLoadedハンドラーは、サポートのためにプロジェクト テンプレートの クラスを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();
}

注釈

このイベントでは 、イベント データとして RoutedEventHandler デリゲートと RoutedEventArgs が 使用されますが、イベントはルーティング イベントではありません。 これは、イベントの発生元の要素 (つまり 、送信者) でのみ処理できます。 このイベントのイベント データの OriginalSource は常に nullです。

読み込まれたとオブジェクトの有効期間

Windows アプリ SDK実装では、Loadedコントロール テンプレートが適用された後にイベントが発生することが保証され、XAML テンプレートを適用して作成されたオブジェクトへの参照を取得できます。

イベントは Loaded 、テンプレートから取得された要素にイベント ハンドラーをフックしたり、適用されたテンプレートの結果である子要素の存在に依存するロジックを呼び出したりするためのポイントとして使用できます。 Loaded は、UI の XAML コントロールを表示する前に、アプリ コードで要素ツリー構造を操作するために推奨されるオブジェクトの有効期間イベントです。 また、初期レイアウトでも発生する他のイベントがない場合は、Loaded ハンドラーから VisualStateManager.GoToState メソッドを呼び出して、テンプレートで定義されている初期ビューステートを設定することも適切です (SizeChanged は初期レイアウトで発生します)。

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

適用されたテンプレートから取得した項目にアクセスするには、 VisualTreeHelper 静的メソッドを使用し、インデックスによって子要素を移動できます。 または、テンプレートコンテンツのルート要素で FindName メソッドを呼び出して、指定された x:Name 属性値 を持つテンプレートの特定の部分を見つけることができます。 コントロール自体ではなく、テンプレート ルートで FindName を 呼び出す必要があることに注意してください。これは、そのテンプレートに固有のテンプレートによってオブジェクトが作成されるたびに XAML 名前スコープが作成されるためです (詳細については、「 XAML 名前スコープ」を参照してください)。 テンプレート ルートにアクセスするには、 をtarget使用VisualTreeHelper.GetChild(target,0)して、 はテンプレートが適用されるオブジェクトです。 そのルートを取得したら、その後、名前付きパーツにアクセスできます。

既存のコントロールから派生する場合は、インスタンスごとに処理 Loaded するのではなく、 OnApplyTemplate をオーバーライドして、動作を既定のクラス動作の一部にすることができます。 OnApplyTemplate は、適用されたテンプレートからオブジェクトのツリーがあり、ビジュアルを調べたり調整したりするこの状況のコールバックとして特に意図されています。 これは、カスタム コントロールの動作の定義の重要な部分です。たとえば、開始ビジュアル状態の宣言や、イベント時オーバーライド パターンを使用して定義できないクラス ハンドラーの配線などのアクションが含まれます。 1 つの違いは、 OnApplyTemplate スコープから GetTemplateChild を 使用して 、FindName ではなく名前付きパーツを検索する必要がある点です。

LayoutUpdated は関連イベントです。 LayoutUpdated イベントは、コントロールを有効にするシーケンスの最後の "オブジェクトの有効期間" イベントであり、 の後にLoaded発生します。 ただし、 LayoutUpdated は、ツリー内の連続する親だけでなく、レイアウト変更に関連するオブジェクトに対して発生します。 UI 内のいくつかのオブジェクトはすべて 、LayoutUpdated を同時に起動する可能性があります。 レイアウトの変更は、ユーザーがビューステートや画面解像度を変更する、同じ UI またはレイアウト コンテナー内の他の要素のプログラムによるサイズ変更など、さまざまな理由で発生します。 このため、 は通常、 Loaded 初期レイアウトまたは適用されたテンプレートで動作するコードを実行する場合に適しています。

ページ間のナビゲーションを使用するアプリ コードの場合は、移動先ページのコントロールの要素操作または状態変更に Page.OnNavigatedTo を使用しないでください。 この仮想メソッドは、テンプレートが読み込まれる前に呼び出されるため、テンプレートの要素はまだ使用できません。 代わりに、新しく読み込まれたページのコンテンツのルートにイベント ハンドラーをアタッチ Loaded し、イベント ハンドラーで Loaded 要素の操作、状態の変更、イベントの配線などを実行します。

適用対象

こちらもご覧ください