FrameworkElement.MeasureOverride(Size) Метод

Определение

Предоставляет поведение для прохода "Measure" цикла макета. Классы могут переопределить этот метод, чтобы определить собственное поведение прохода "Measure".

protected:
 virtual Size MeasureOverride(Size availableSize) = MeasureOverride;
Size MeasureOverride(Size const& availableSize);
protected virtual Size MeasureOverride(Size availableSize);
function measureOverride(availableSize)
Protected Overridable Function MeasureOverride (availableSize As Size) 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);
}

Комментарии

Этот метод имеет реализацию по умолчанию, которая выполняет встроенный макет для большинства производных классов FrameworkElement . MeasureOverride обеспечивает поведение для Measure всякий раз, когда Measure вызывается внутренней логикой макета или кодом вашего приложения, включая любые MeasureOverride собственные методы для других классов. Если вы создаете шаблонный элемент управления, логика MeasureOverride определяет конкретную логику макета прохода меры элемента управления.

Общая схема того, как элементы проходят через процесс макета при запуске приложения, делится на два этапа: проход "Измерение" и проход "Упорядочить". Авторы элементов управления (или авторы панелей), которые хотят настроить проход "Measure" обработки макета, должны переопределить MeasureOverride. Реализация должна выполнять следующие действия.

  • Выполните итерацию определенной коллекции дочерних объектов класса, которые являются частью макета, и вызовите Measure для каждого дочернего объекта.
  • Немедленно получите DesiredSize для каждого дочернего элемента (это свойство задается как свойство после вызова Measure ).
  • Вычислить требуемый размер родительского объекта на основе выполняющегося измерения размера, необходимого для дочерних объектов. Возвращаемое значение MeasureOverride должно быть собственным требуемым размером объекта, который затем становится входным значением Measure для родительского объекта текущего объекта. Этот же процесс продолжается в системе макета до тех пор, пока не будет достигнут корень дерева страницы или объекта. Во время этого процесса дочерние объекты могут возвращать больший размер DesiredSize , чем начальный availableSize , чтобы указать, что дочернему объекту требуется больше места. Это может быть обработано в вашей собственной реализации, внедрив прокручиваемую область, изменив размер родительского элемента управления, установив определенный порядок размещения или любое количество решений для измерения или упорядочения содержимого, которое может отличаться в зависимости от предполагаемой функциональности контейнера макета.

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

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