UIElement.Measure(Size) Метод

Определение

Обновления DesiredSizeэлемента UIElement. Как правило, объекты, реализующие пользовательский макет для дочерних элементов макета, вызывают этот метод из собственных реализаций 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 для реализации пользовательской панели. Обратите внимание, в частности, на следующие аспекты кода:

  • Выполняет итерацию по детям.
  • Для каждого дочернего элемента вызывает метод 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);
}
'First measure all children and return available size of panel 
Protected Overrides Function MeasureOverride(ByVal availableSize As Size) As Size
    'Measure first 9 children giving them space up to 100x100, remaining children get 0x0 
    Dim i As Integer = 0
    For Each child As FrameworkElement In Children
        If i < 9 Then
            child.Measure(New Size(100, 100))
        Else
            child.Measure(New Size(0, 0))
        End If
        i += 1
    Next
    'return the size available to the whole panel, which is 300x300 
    Return New Size(300, 300)
End Function

Комментарии

Вызов Measure потенциально достигает реализации MeasureOverride этого конкретного класса. В противном случае большинство классов FrameworkElement имеют неявное поведение макета по умолчанию для measure.

AvailableSize может быть любым числом от нуля до бесконечного. Элементы, участвующие в макете, должны возвращать минимальный размер , необходимый для заданного элемента availableSize.

Вычисление начального размещения макета в пользовательском интерфейсе XAML состоит из вызова Measure и вызова Arrange в этом порядке. Во время вызова Measure система макета определяет требования к размеру элемента с помощью измерения availableSize . Во время вызова Arrange система макета завершает размер и положение ограничивающего прямоугольника элемента.

При первом создании макета всегда имеется вызов Measure, который выполняется до упорядочения. Однако после первого прохода макета вызов Arrange может выполняться без меры, предшествующей ему. Это может произойти при изменении свойства, влияющего только на упорядочивание (например, выравнивание), или когда родитель получает элемент Arrange без меры.

Вызов Measure автоматически сделает недействительными любые сведения о упорядочиваниях . Обновления макета обычно выполняются асинхронно (в то время, определенное системой макета). Элемент может не сразу отражать изменения свойств, влияющие на размер элемента (например , Width).

Применяется к

См. также раздел