レイアウトシステムについて説明します。ユーザーインターフェイスを作成するには、レイアウトの計算がどのように行われるかを理解することが不可欠です。WPF.このトピックは、次のセクションで構成されています。レイアウトについて考えるときは、すべての要素を囲む境界ボックスについて理解しておくことが重要です。レイアウトFrameworkElementシステムによって使用される各は、レイアウトにスロット分割される四角形と考えることができます。(余白や埋め込みなど)、および親Panel要素の個々の動作を計算することによって決定されます。レイアウトシステムは、このデータを処理することで、特定Panelののすべての子の位置を計算できます。Borderように、親要素で定義されているサイズ設定特性は、その子に影響を与えることに注意してください。children.次の図は、シンプルなレイアウトを示しています。使用して実現できます。Grid.Row="2"/></Grid>1つTextBlockの要素がGrid内でホストされます。テキストは最初の列の左上隅にのみ表示TextBlockされますが、の割り当て済み領域は実際には非常に大きくなります。GetLayoutSlotメソッドを使用して取得できます。TextBlock要素の境界ボックスを次の図に示します。TextBlock要素に割り当てられた領域は、実際には表示されるよりもはるかに大きくなります。追加の要素がにGrid追加されると、追加される要素の型とサイズに応じて、この割り当てが縮小または拡張される可能性があります。GetLayoutSlotメソッドを使用しPathてに変換されます。この方法は、要素の境界ボックスの表示に役立ちます。System簡単に言うと、レイアウトは、要素のサイズ測定、配置、および描画を繰り返す再帰的なシステムです。Childrenコレクションのメンバーを測定および整列するプロセスについて説明します。レイアウトは集中的なプロセスです。コレクションがChildren大きいほど、作成する必要がある計算の数が多くなります。コレクションを所有するPanel要素によって定義されたレイアウトの動作に基づいて、複雑さを導入することもできます。Gridなパフォーマンスを大幅に向上させることができます。Grid.子UIElementがその位置を変更するたびに、レイアウトシステムによって新しいパスがトリガーされる可能性があります。システムを呼び出す可能性があるイベントを理解することが重要です。システムが呼び出されたときに発生するプロセスについて説明します。invoked.子UIElementは、最初にコアプロパティを測定して、レイアウトプロセスを開始します。定義されたサイズ変更プロパティが評価されます。Margin.PanelDock方向やスタックOrientationなど、固有のロジックが適用されます。Orientation.すべての子が測定された後にコンテンツが配置されます。measured.Childrenコレクションが画面に描画されます。UpdateLayoutが適用された場合、またはメソッドが呼び出された場合は、プロセスが再度呼び出されます。called.このプロセスとその呼び出し方法は、次のセクションで詳細に定義します。Childrenコレクションのメンバーごとに、測定パスと配置パスの2つのパスを完了します。独自ArrangeOverrideの特定のレイアウト動作を実現するためのメソッドとメソッドが用意されています。Childrenコレクションの各メンバーが評価されます。プロセスは、メソッドのMeasure呼び出しで開始されます。このメソッドは、親Panel要素の実装内で呼び出されます。レイアウトを行うには、明示的に呼び出す必要はありません。MeasureCore渡されるという名前の値が生成されます。MeasureCore.2番目の方法とFrameworkElementして、に定義されてconstraintSizeいるフレームワークプロパティが処理され、の値に影響します。基になるのサイズ設定特性を記述します。これらの各プロパティは、要素を表示するために必要な領域を変更できます。MeasureOverrideは、パラメーターとconstraintSizeしてで呼び出されます。ActualHeight間には違いがあります。プロパティは、他の高さ入力およびレイアウトシステムに基づく計算値です。値は、実際のレンダリングパスに基づいてレイアウトシステム自体によって設定されます。したがって、入力の変更の基礎となるHeight、などのプロパティの設定値よりも少し遅れが生じることがあります。change.はActualHeight計算値であるため、レイアウトシステムによるさまざまな操作の結果として、複数のまたは増分の報告される変更がある可能性があることに注意してください。システムが、子要素に必要な測定スペース、親要素による制約などを計算している場合があります。MeasureCore呼び出し中に発生するを決定することです。値は、コンテンツのMeasure配置パス中に使用するためにによって格納されます。pass.配置パスは、メソッドのArrange呼び出しで始まります。配置パス中に、親Panel要素は、子の境界を表す四角形を生成します。ArrangeCore処理のためにメソッドに渡されます。processing.メソッドArrangeCoreは、子DesiredSizeのを評価し、表示される要素のサイズに影響する可能性のある追加の余白を評価します。ArrangeCoreを生成します。Panelパラメーターとしてのメソッドに渡されます。ArrangeOverridefinalSize子のを生成します。ArrangeCoreメソッドは、余白や配置などのオフセットプロパティの最終的な評価を行い、子をレイアウトスロット内に配置します。(そうしない場合もよくあります)。次に、コントロールが親Panelに返され、レイアウトプロセスが完了します。Panel派生する要素のグループが含まれています。これらPanelの要素により、多数の複雑なレイアウトが可能になります。StackPanel要素を使用すると、積み重ねる要素を簡単に実現できます。Canvas使用すると、より複雑でフリーのフローレイアウトが可能になります。Canvas.次の表は、使用可能Panelなレイアウト要素をまとめたものです。Canvas領域を基準に相対的に子要素を相対的に配置できる領域を定義します。子要素を互いに水平方向または垂直方向に整列する領域を定義します。行と列で構成される柔軟性のあるグリッド領域を定義します。子要素を水平方向または垂直方向の単一行に整列します。子データコレクションをPanel仮想化する要素のフレームワークを提供します。これは抽象クラスです。左から右へ順に子要素を配置し、ボックスの端で改行してコンテンツを次の行へ送ります。Orientationプロパティの値に応じて、上から下または右から左に順番に行われます。property.定義済みPanelの要素のいずれかを使用しても不可能なレイアウトを必要とするアプリケーションでは、をPanel継承し、メソッドMeasureOverrideとArrangeOverrideメソッドをオーバーライドすることにより、カスタムレイアウト動作を実現できます。Considerationsレイアウトは再帰的なプロセスです。Childrenコレクション内の各子要素は、レイアウトシステムの呼び出し中に処理されます。システムをトリガーしないようにしてください。次の考慮事項は、パフォーマンスを向上させるのに役立ちます。システムによる再帰的な更新を強制するかに注意してください。フラグでマークされます。AffectsMeasureとAffectsArrangeは、レイアウトシステムによって強制的に再帰的に更新されるプロパティ値の変更に役立つ手掛かりを提供します。設定されている必要があります。依存関係プロパティの詳細については、「依存関係プロパティの概要」を参照してください。LayoutTransformの代わりにを使用します。LayoutTransform.は、のコンテンツに影響を与える非常に便利な方法になります。変換の効果が他の要素の位置に影響を与えない場合は、をRenderTransform使用することをお勧めします。これは、がレイアウトシステムを呼び出さないためRenderTransformです。LayoutTransform変換を適用し、影響を受ける要素の新しい位置を考慮して、再帰的なレイアウトの更新を強制的に実行します。element.の不要な呼び出しUpdateLayoutを回避します。UpdateLayout.メソッドUpdateLayoutは、レイアウトの再帰的な更新を強制的に実行するため、頻繁には必要ありません。you.大きなChildrenコレクションを使用する場合は、通常StackPanelのVirtualizingStackPanelではなくを使用することを検討してください。StackPanel.子コレクションを仮想化することVirtualizingStackPanelにより、は、現在親のビューポート内にあるメモリ内のオブジェクトのみを保持します。その結果、ほとんどのシナリオでパフォーマンスが大幅に向上します。グラフィックスシステムでは、デバイスに依存しない単位を使用して、解像度とデバイスに依存しないようにします。設定に応じて自動的にスケーリングされます。対応するようになります。依存しない場合は、アンチエイリアシングのために不規則なエッジレンダリングが作成できます。ピクセルの中間にある場合に発生します。システムは、レイアウトの丸め処理でこれを調整する方法を提供します。パスの実行中に任意の整数以外のピクセル値を丸めます。pass.レイアウトの丸め処理は既定で無効になっています。FrameworkElement任意のでプロパティをに設定します。ツリー内のすべての子に反映されます。全体のレイアウトの丸め処理を有効にUseLayoutRoundingするtrueには、ルートコンテナーのをに設定します。例については、「UseLayoutRounding」を参照してください。Next要素の測定方法と配置方法を理解することが、レイアウトを理解する最初のステップです。使用可能なPanel要素の詳細については、「パネルの概要」を参照してください。レイアウトに影響を与えるさまざまな配置プロパティをより理解するには、「配置、余白、パディングの概要」を参照してください。デスクトップアプリケーション。Design関連記事このページはお役に立ちましたか?YesNo追加のフィードバックはありますか?スキップ送信ありがとうございます。Cookie利用条件サイトのフィードバック商標このページはお役に立ちましたか?YesNo追加のフィードバックはありますか?スキップ送信ありがとうございます。Cookie利用条件サイトのフィードバック。