UIElement.Arrange(Rect) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
public:
virtual void Arrange(Rect finalRect) = Arrange;
void Arrange(Rect const& finalRect);
public void Arrange(Rect finalRect);
function arrange(finalRect)
Public Sub Arrange (finalRect As Rect)
パラメーター
例
この例では、ArrangeOverride 実装内での使用方法Arrange
を示します。 基本的な考え方は、 として渡す前に目的のサイズを変更または無視する特定のデザインがレイアウト実装に含まれていない限り、 の値finalRect
を持つよう、呼び出Arrange
そうとするすべてのものに対して DesiredSize に対してクエリを実行する必要があるということですfinalRect
。
// Second arrange all children and return final size of panel
protected override Size ArrangeOverride(Size finalSize)
{
// Get the collection of children
UIElementCollection mychildren = Children;
// Get total number of children
int count = mychildren.Count;
// Arrange children
// We're only allowing 9 children in this panel. More children will get a 0x0 layout slot.
int i;
for (i = 0; i < 9; i++)
{
// Get (left, top) origin point for the element in the 3x3 block
Point cellOrigin = GetOrigin(i, 3, new Size(100, 100));
// Arrange child
// Get desired height and width. This will not be larger than 100x100 as set in MeasureOverride.
double dw = mychildren[i].DesiredSize.Width;
double dh = mychildren[i].DesiredSize.Height;
mychildren[i].Arrange(new Rect(cellOrigin.X, cellOrigin.Y, dw, dh));
}
// Give the remaining children a 0x0 layout slot
for (i = 9; i < count; i++)
{
mychildren[i].Arrange(new Rect(0, 0, 0, 0));
}
// Return final size of the panel
return new Size(300, 300);
}
注釈
呼び出しは Arrange
、その特定のクラスの ArrangeOverride 実装に到達する可能性があります。 それ以外の場合、ほとんどの FrameworkElement クラスには、 の暗黙的な既定のレイアウト動作があります Arrange
。
XAML UI での初期レイアウト配置の計算は、 メジャー 呼び出しと呼び出し Arrange
で構成されます。
Measure
呼び出し中に、レイアウト システムは、測定を使用して要素のサイズ要件をavailableSize
決定します。 Arrange 呼び出し中に、レイアウト システムは要素の境界ボックスのサイズと位置を最終処理します。
レイアウトが最初に生成されるときは、常に 前 に行われる Arrange
Measure 呼び出しがあります。 ただし、最初のレイアウト パスの後に、 を前に置かずに Arrange
呼び出しを Measure
行うことができます。 これは、 にのみArrange
影響するプロパティが変更された場合 (配置など)、または親が を持たない Measure
をArrange
受け取ったときに発生する可能性があります。
Measure 呼び出しは、すべてのArrange
情報を自動的に無効にします。 通常、レイアウトの更新は非同期的に行われます (レイアウト システムによって決定される時点)。 要素のサイズ設定 ( Width など) に影響を与えるプロパティの変更が要素にすぐに反映されない場合があります。
UpdateLayout メソッドを使用して、組み込みのレイアウト システムの動作に依存するのではなく、アプリ コードによってレイアウトの更新を強制できます。 ただし、これは推奨されません。 通常は不要であり、過度に使用するとパフォーマンスが低下する可能性があります。 プロパティの変更により、アプリ コードからの呼び出し UpdateLayout
が適切な場合は、多くの場合、レイアウト システムが既に更新を処理している可能性があります。 レイアウト システムには、親子関係を介したレイアウト変更の連鎖を処理するための最適化も用意されており、呼び出し UpdateLayout
はこのような最適化に対して機能します。 それでも、レイアウトの問題やレイアウトに関するその他の問題を解決するために、呼び出し UpdateLayout
が最適なオプションである、より複雑なシナリオにレイアウトの状況が存在する可能性があります。 意図的かつ控えめに使用するだけです。