このドキュメントはアーカイブされており、メンテナンスされていません。

FrameworkElement.MeasureOverride メソッド

派生クラスでオーバーライドされると、子要素に必要なレイアウトのサイズを測定し、FrameworkElement 派生クラスのサイズを決定します。

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

protected virtual Size MeasureOverride (
	Size availableSize
)
protected Size MeasureOverride (
	Size availableSize
)
protected function MeasureOverride (
	availableSize : Size
) : Size
メソッドは XAML では使用できません。

パラメータ

availableSize

この要素が子要素に与えることができる使用可能なサイズ。値として無限大を指定し、この要素があらゆるコンテンツにサイズを合わせられるようにすることができます。

戻り値

子要素のサイズの計算に基づいてこの要素でレイアウト時に必要と判断されたサイズ。

要素の Windows Presentation Foundation (WPF) レイアウト システムでのカスタム レイアウト サイズ変更動作を実装するには、MeasureOverride をオーバーライドします。実装では次の処理を行う必要があります。

  1. 要素のレイアウトの一部となっている子の特定のコレクションを反復処理して、各子要素で Measure を呼び出します。

  2. そのまま子の DesiredSize を取得します (この値は Measure の呼び出し後にプロパティとして設定されます)。

  3. 子要素の測定に基づいて親の最終的な必要サイズを計算します。

MeasureOverride の戻り値は要素自身の必要サイズであり、この値がさらに、現在の要素の親要素の測定の入力になります。ページのルート要素に到達するまでこの同じプロセスがレイアウト システムで繰り返されます。

このプロセスの間に、最初の availableSize より大きなサイズの DesiredSize が子要素から返される場合があります。これは、その子要素により多くの領域が必要であることを示します。この場合は、スクロール可能な領域を導入する、親コントロールのサイズを変更する、何らかのスタック順序を確立するなど、コンテンツの測定や配置のためのあらゆる方法を使用して対処することができます。

メモ重要 :

要素では、このプロセスの間に各子要素で Measure を呼び出す必要があります。各子要素で呼び出さないと、子要素のサイズ設定や配置は行われません。

継承元へのメモ : 次のコンパイルされないコードは、この実装パターンを示しています。VisualChildren は、実際の要素で定義する必要がある子の列挙可能なコレクションのプロパティを表しています。このプロパティの名前は自由に指定できます。VisualChildren はこの例のためのプレースホルダ名であり、WPF によって提供される API や名前付けパターンの一部ではありません。

protected override Size MeasureOverride(Size availableSize)
{
    Size desiredSize = new Size();
    foreach (UIElement child in VisualChildren)
    {
        child.Measure(availableSize);
        // do something with child.DesiredSize, either sum them directly or apply whatever logic your element has for reinterpreting the child sizes
        // if greater than availableSize, must decide what to do and which size to return
    }
    // desiredSize = ... computed sum of children's DesiredSize ...;
    // IMPORTANT: do not allow PositiveInfinity to be returned, that will raise an exception in the caller!
    // PositiveInfinity might be an availableSize input; this means that the parent does not care about sizing
    return desiredSize;
}

Microsoft .NET Framework 3.0 は Windows Vista,Microsoft Windows XP SP2,および Windows Server 2003 SP1 でサポートされています。

.NET Framework

サポート対象 : 3.0
表示: