UIElement.Measure(Size) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
UIElement の DesiredSize を更新します。 通常、レイアウトの子用にカスタム レイアウトを実装するオブジェクトは、独自の MeasureOverride 実装からこのメソッドを呼び出して、再帰的なレイアウト更新を形成します。
public:
virtual void Measure(Size availableSize) = Measure;
void Measure(Size const& availableSize);
public void Measure(Size availableSize);
function measure(availableSize)
Public Sub Measure (availableSize As Size)
パラメーター
- availableSize
- Size
親が子オブジェクトに割り当てることができる空き領域。 子オブジェクトは、使用可能な領域よりも大きな領域を要求できます。指定されたサイズは、その特定のコンテナーでスクロールやその他のサイズ変更動作が可能な場合に対応できます。
例
この例では、 MeasureOverride を実装して、カスタム パネル実装の "Measure" パス ロジックをカスタマイズします。 特に、コードの次の側面に注意してください。
- 子を反復処理します。
- 各子について、パネル ロジックが子の数と独自の既知のサイズ制限をどのように扱うかに基づいて、 Size を使用して Measure を呼び出します。
- そのサイズを返します (この単純なパネルは、測定値の累積で計算されたサイズではなく、固定サイズを返します)。
// First measure all children and return available size of panel
protected override Size MeasureOverride(Size availableSize)
{
// Measure first 9 children giving them space up to 100x100, remaining children get 0x0
int i = 0;
foreach (FrameworkElement child in Children)
{
if (i < 9)
{
child.Measure(new Size(100, 100));
}
else
{
child.Measure(new Size(0, 0));
}
i++;
}
// return the size available to the whole panel, which is 300x300
return new Size(300, 300);
}
注釈
Measure 呼び出しは、その特定のクラスの MeasureOverride 実装に到達する可能性があります。 それ以外の場合、ほとんどの FrameworkElement クラスには Measure の暗黙的な既定のレイアウト動作があります。
availableSize には、0 から無限の任意の数値を指定できます。 レイアウトに参加している要素は、特定の availableSize に必要な最小サイズを返す必要があります。
XAML UI での初期レイアウト配置の計算は、Measure 呼び出しと Arrange 呼び出しで構成されます。 Measure 呼び出し中に、レイアウト システムは availableSize 測定を使用して要素のサイズ要件を決定します。 配置呼び出し中に、レイアウト システムは要素の境界ボックスのサイズと位置を最終処理します。
レイアウトが最初に生成されると、配置の前に常に Measure 呼び出しが行 われます。 ただし、最初のレイアウト パスの後に、 配置 呼び出しは、前に Measure を指定せずに行うことができます。 これは、 配置 のみに影響するプロパティが変更された場合 (配置など)、または親が Measure を使用せずに 配置 を受け取る場合に発生する可能性があります。
Measure 呼び出しでは、 すべての Arrange 情報が自動的に無効になります。 通常、レイアウトの更新は非同期的に行われます (レイアウト システムによって決定されます)。 要素のサイズ変更 ( Width など) に影響を与えるプロパティに対する変更が、要素にすぐに反映されない場合があります。