UIElement.Measure(Size) メソッド


UIElementDesiredSize を更新します。Updates the DesiredSize of a UIElement. 親要素は、独自の MeasureCore(Size) 実装からこのメソッドを呼び出し、レイアウトを再帰的に更新します。Parent elements call this method from their own MeasureCore(Size) implementations to form a recursive layout update. このメソッドの呼び出しは、レイアウト更新の最初のパス (「メジャー」パス) となります。Calling this method constitutes the first pass (the "Measure" pass) of a layout update.

 void Measure(System::Windows::Size availableSize);
public void Measure (System.Windows.Size availableSize);
member this.Measure : System.Windows.Size -> unit
Public Sub Measure (availableSize As Size)



親要素が子要素を割り当てることができる使用可能な領域。The available space that a parent element can allocate a child element. 子要素は使用可能な空間よりも大きな空間を要求できます。現在の要素のコンテンツ モデルでスクロールが可能な場合、指定されたサイズに対応できる可能性があります。A child element can request a larger space than what is available; the provided size might be accommodated if scrolling is possible in the content model for the current element.


Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) でのレイアウト配置の計算は、Measure 呼び出しと Arrange 呼び出しで構成されます。Computation of layout positioning in Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) is comprised of a Measure call and an Arrange call. Measure の呼び出し中に、要素は availableSize 入力を使用してサイズ要件を決定します。During the Measure call, an element determines its size requirements by using an availableSize input. Arrange の呼び出し中に、要素のサイズが終了します。During the Arrange call, the element size is finalized.

availableSize 0 から無限までの任意の数を指定できます。availableSize can be any number from zero to infinite. レイアウトに参加する要素は、特定の availableSizeに必要な最小 Size を返す必要があります。Elements participating in layout should return the minimum Size they require for a given availableSize.

レイアウトが最初にインスタンス化されると、Arrange前に常に Measure 呼び出しを受け取ります。When a layout is first instantiated, it always receives a Measure call before Arrange. ただし、最初のレイアウトパスの後に、Measureを使用せずに Arrange 呼び出しを受け取る場合があります。これは、Arrange のみに影響するプロパティ (アラインメントなど) が変更された場合、または親が Measureのない Arrange を受け取った場合に発生する可能性があります。However, after the first layout pass, it may receive an Arrange call without a Measure; this can happen when a property that affects only Arrange is changed (such as alignment), or when the parent receives an Arrange without a Measure. Measure の呼び出しは、Arrange の呼び出しを自動的に無効にします。A Measure call will automatically invalidate an Arrange call.

レイアウトの更新は、メインスレッドが可能なすべてのレイアウト変更を待機していないように、非同期的に行われます。Layout updates happen asynchronously, such that the main thread is not waiting for every possible layout change. プロパティ値の分離コードチェックによって要素にクエリを実行すると、サイズ変更やレイアウトの特性と対話するプロパティ (Width プロパティなど) に対する変更がすぐに反映されない場合があります。Querying an element via code-behind checking of property values may not immediately reflect changes to properties that interact with the sizing or layout characteristics (the Width property, for example).


UpdateLayout メソッドを使用して、レイアウトの更新を強制することができます。Layout updates can be forced by using the UpdateLayout method. ただし、通常、このメソッドを呼び出す必要はなく、パフォーマンスが低下する可能性があります。However, calling this method is usually unnecessary and can cause poor performance.

レイアウトシステムは、無効なレイアウトの2つの異なるキューを保持します。1つは Measure 用で、もう1つは Arrange用です。The layout system keeps two separate queues of invalid layouts, one for Measure and one for Arrange. レイアウトキューは、レイアウトを実行している要素のビジュアルツリー内の要素の順序に基づいて並べ替えられます。ツリー内の上位にある要素はキューの最上位にあり、親の繰り返し変更によって発生する冗長レイアウトを回避します。The layout queue is sorted based upon the order of elements in the visual tree of the element performing layout; elements higher in the tree are at the top of the queue, to avoid redundant layouts caused by repeated changes in parents. 重複するエントリはキューから自動的に削除され、既にレイアウトが検証されている場合、要素はキューから自動的に削除されます。Duplicate entries are automatically removed from the queue, and elements are automatically removed from the queue if they are already layout-validated.

レイアウトを更新すると、最初に Measure キューが空になり、次に Arrange キューが空になります。When updating layout, the Measure queue is emptied first, followed by the Arrange queue. Measure キューに要素がある場合、Arrange キュー内の要素は配置されません。An element in the Arrange queue will never be arranged if there is an element in the Measure queue.