エクスポート (0) 印刷
すべて展開
展開 最小化
この記事は機械翻訳されたものです。 記事の文章にポインターを重ねると、原文のテキストが表示されます。 詳細情報
訳文
原文

UIElement.Arrange メソッド

子要素を配置し、 UIElementのサイズを決定します。 親要素はそれぞれの ArrangeCore 実装 (または WPF フレームワーク レベルの同等実装) からこのメソッドを呼び出し、レイアウトを再帰的に更新します。 このメソッドは、レイアウト更新の第 2 のパスを構成します。

名前空間:  System.Windows
アセンブリ:  PresentationCore (PresentationCore.dll 内)

public void Arrange(
	Rect finalRect
)

パラメーター

finalRect
型 : System.Windows.Rect

親要素が子要素のために計算した最終的なサイズを示す Rect のインスタンス。


WPF フレームワーク レベルの要素の派生シナリオでは、Arrange の動作を変更しないでください (シャドウ処理しない限り変更できません)。 代わりに、クラスの ArrangeOverride 実装をオーバーライドする必要があります。 ArrangeOverride 実装は、既定の WPF フレームワーク レベルのレイアウト処理の一環として、Arrange によって内部的に呼び出されます。 子要素を持つ場合、ArrangeCore 実装は、各子要素でも ArrangeOverride を呼び出す必要があります。

WPF コア レベルの要素の派生シナリオでは、Arrange の動作を変更しないでください (シャドウ処理しない限り変更できません)。 代わりに、クラスの ArrangeCore をオーバーライドする必要があります。 ArrangeCore 実装は、既定の WPF フレームワーク レベルのレイアウト処理の一環として、Arrange によって内部的に呼び出されます。 ただし、これは WPF フレームワーク レベルのレイアウトとそのレイアウト システムを使用していることを前提にしています。特に WPF コア レベルで UIElement 基本要素クラスから要素を派生している場合は、通常この前提が成立しません。 子要素を持つ場合、ArrangeCore 実装は、各子要素でも Arrange を呼び出す必要があります。 WPF コア レベルのシナリオは、FrameworkElement 派生クラスが使用されていないことを意味します。これは、FrameworkElementArrangeCore をシールするためです。

Windows Presentation Foundation (WPF) における WPF フレームワーク レベルのレイアウト位置の計算は、MeasureArrange の呼び出しによって行われます。 Measure の呼び出し中に、レイアウト システムは、指定された Size (availableSize) 引数を使用して要素のサイズ要件を判断します。 Arrange の呼び出し中に、レイアウト システムは要素の境界ボックスのサイズと位置の設定を終了します。詳細については、「レイアウト」を参照してください。

availableSize には、ゼロから無限大までの任意の数値を指定できます。 配置対象の要素は、指定された availableSize パラメーターに対して必要な Size の最小値を返します。

レイアウトは、初めてインスタンス化されると、必ず Arrange 呼び出しの前に Measure 呼び出しを受け取ります。 しかし、最初のレイアウト パスの後に、Measure 呼び出しを受け取らずに Arrange 呼び出しを受け取る場合があります。これは、Arrange だけに影響するプロパティ (配置など) が変更された場合や、親が Measure を受け取らずに Arrange を受け取った場合に発生する可能性があります。 Measure 呼び出しは、自動的に Arrange 呼び出しを無効化します。

一般に、レイアウトの更新は (レイアウト システムによって決定されたタイミングで) 非同期に行われます。 要素のサイズ設定に影響するプロパティ (Width など) が変更されても、要素に直ちに反映されない場合があります。

メモメモ

UpdateLayout メソッドを使用すると、レイアウトの更新を強制的に実行できますが、この関数の呼び出しは通常不要であり、パフォーマンスの低下を招く可能性があるため、お勧めできません。 UpdateLayout の呼び出しが適切と思われても、レイアウト システムによって更新処理が既に進められている場合が少なくありません。 レイアウト システムは、必要とされるすべての更新処理を 1 つのパッケージにまとめて効率化する方法で、レイアウトの変更を処理できます。

レイアウト システムは、無効なレイアウトに関する 2 つの異なるキューを保持しています。1 つは Measure 用、もう 1 つは Arrange 用です。 レイアウト キューは、ビジュアル ツリー内の要素の順序に基づいて並べ替えられます。 親が繰り返し変更されることによってレイアウト処理を無駄に繰り返す必要がないように、ツリーの上位にある要素がキューの先頭に配置されます。 重複するエントリはキューから自動的に削除され、既に有効になった要素もキューから自動的に削除されます。

レイアウトを更新すると、まず Measure キューが空になり、続いて Arrange キューが空になります。 Measure キューに要素が存在する場合、Arrange キューの要素は並べ替えられません。

この例では、Panel 要素の既定のレイアウト動作をオーバーライドして、Panel から派生したカスタム レイアウト要素を作成する方法を示します。

この例では、PlotPanel という単純なカスタム Panel 要素を定義します。この要素は、ハードコーディングされた x 座標および y 座標に従って子要素を配置します。 この例では、x および y をどちらも 50 に設定します。そのため、すべての子要素は x 座標および y 座標上のこの位置に配置されます。

カスタムの Panel 動作を実装するために、この例では MeasureOverride メソッドと ArrangeOverride メソッドを使用します。 各メソッドは、子要素の配置とレンダリングに必要な Size データを返します。


public class PlotPanel : Panel
{
    // Default public constructor
    public PlotPanel()
        : base()
    {
    }

    // Override the default Measure method of Panel
    protected override Size MeasureOverride(Size availableSize)
    {
        Size panelDesiredSize = new Size();

        // In our example, we just have one child. 
        // Report that our panel requires just the size of its only child.
        foreach (UIElement child in InternalChildren)
        {
            child.Measure(availableSize);
            panelDesiredSize = child.DesiredSize;
        }

        return panelDesiredSize ;
    }
    protected override Size ArrangeOverride(Size finalSize)
    {
        foreach (UIElement child in InternalChildren)
        {
            double x = 50;
            double y = 50;

            child.Arrange(new Rect(new Point(x, y), child.DesiredSize));
        }
        return finalSize; // Returns the final Arranged size
    }
}


.NET Framework

サポート対象 : 4.5.2、4.5.1、4.5、4、3.5、3.0

.NET Framework Client Profile

サポート対象 : 4、3.5 SP1

Windows Phone アプリ用 .NET

サポート対象 : Windows Phone 8、Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (サーバー コア ロールはサポート対象外), Windows Server 2008 R2 (SP1 以降でサーバー コア ロールをサポート。Itanium はサポート対象外)

.NET Framework では、各プラットフォームのすべてのバージョンはサポートしていません。サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。

コミュニティの追加

追加
表示:
© 2015 Microsoft