FrameworkElement.LayoutUpdated イベント

定義

レイアウト関連のプロパティが値を変更したり、レイアウトを更新するその他のアクションが原因で、ビジュアル ツリーのレイアウトが変更されたときに発生します。

// Register
event_token LayoutUpdated(EventHandler<IInspectable> const& handler) const;

// Revoke with event_token
void LayoutUpdated(event_token const* cookie) const;

// Revoke with event_revoker
FrameworkElement::LayoutUpdated_revoker LayoutUpdated(auto_revoke_t, EventHandler<IInspectable> const& handler) const;
public event System.EventHandler<object> LayoutUpdated;
function onLayoutUpdated(eventArgs) { /* Your code */ }
frameworkElement.addEventListener("layoutupdated", onLayoutUpdated);
frameworkElement.removeEventListener("layoutupdated", onLayoutUpdated);
- or -
frameworkElement.onlayoutupdated = onLayoutUpdated;
Public Custom Event LayoutUpdated As EventHandler(Of Object) 
<frameworkElement LayoutUpdated="eventhandler"/>
 

イベントの種類

注釈

LayoutUpdated は、コントロールが対話する準備が整う前に、XAML 読み込みシーケンスで最後に発生するオブジェクトの有効期間イベントです。 ただし、LayoutUpdated は、プロパティの変更、ウィンドウのサイズ変更、ランタイム レイアウト要求 (UpdateLayout または変更されたコントロール テンプレート) など、さまざまな理由で、オブジェクトの有効期間中に実行時に発生する可能性もあります。 LayoutUpdated イベントは、レイアウト シーケンス内のすべての SizeChanged イベントが発生した 後に発生します。

LayoutUpdated は、ハンドラーがアタッチされているオブジェクトが、その下のビジュアル ツリー内で必ずしも何も変更しない場合に発生する可能性があります。 たとえば、スペースを共有する 2 つの子要素があるレイアウト コンテナーを想像してください。 最初のオブジェクトが新しいレイアウトを強制するプロパティを変更した場合、2 番目のオブジェクトは独自の補助レイアウトが変更されない場合でも再配置される可能性があるため、両方のオブジェクトが LayoutUpdated を発生させます。

LayoutUpdated を処理する場合は、 送信者 の値に依存しないでください。 LayoutUpdated の場合、ハンドラーがアタッチされている場所に関係なく、 送信者 は常に null になります。 これは、ハンドラーが 送信者に意味を割り当てないようにするためです。たとえば、ビジュアル ツリーからイベントを発生させる特定の要素であることを意味します。 LayoutUpdated は、ビジュアル ツリー全体の何かが変更されたことを意味し、ツリー内の任意の場所にある特定のオブジェクトごとに、この発生を処理するオプションがあります。 下位レベルのレンダー API 設計に慣れている場合は、オブジェクト駆動型の保持モードレンダリング ロジックの一部として設定されている "再描画が必要な" フラグと同様に LayoutUpdated が起動されるのと同じことができます。

LayoutUpdated は多くの状況で発生し、実際に変更されるオブジェクトに常に固有のわけではありませんので、代わりに SizeChanged イベントを処理する方がシナリオに適しているかどうかを検討してください。

Windows 8 の動作

Windows 8 では、このイベントの複数のリスナーを追跡する際に問題が発生しました。 イベントに対して複数のリスナー/ハンドラーがある場合、そのうちの 1 つを削除しようとすると、それらのすべてが削除されます。 この問題は、Windows 8.1 以降で修正されています。構文を使用してイベント ハンドラーを削除すると、一度に -= 1 つのリスナーのみが正しく削除されます。 イベントごとに複数のリスナーを処理することは一般的ではないシナリオであるため、ほとんどのコードでは変更や動作チェックは必要ありません。

Windows 8 用にコンパイルしたアプリは、Windows 8.1 上で実行しても Windows 8 のときと同じ動作になります。

適用対象

こちらもご覧ください