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);
}
'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
Комментарии
Этот метод имеет реализацию по умолчанию, которая выполняет встроенный макет для большинства производных классов FrameworkElement . MeasureOverride обеспечивает поведение для Measure всякий раз, когда Measure вызывается внутренней логикой макета или кодом вашего приложения, включая любые собственные методы MeasureOverride для других классов. Если вы создаете шаблонный элемент управления, логика MeasureOverride определяет логику макета прохода "Measure" элемента управления.
Общая схема того, как элементы проходят через процесс макета при запуске приложения, делится на два этапа: проход "Измерение" и проход "Упорядочить". Авторы элементов управления (или авторы панелей), которые хотят настроить проход "Measure" обработки макета, должны переопределить MeasureOverride. Реализация должна выполнять следующие действия.
- Выполните итерацию определенной коллекции дочерних объектов класса, которые являются частью макета, и вызовите Measure для каждого дочернего объекта.
- Немедленно получите DesiredSize для каждого дочернего элемента (это свойство задается как свойство после вызова Measure ).
- Вычислить требуемый размер родительского объекта на основе выполняющегося измерения размера, необходимого для дочерних объектов. Возвращаемое значение MeasureOverride должно быть собственным требуемым размером объекта, который затем становится входным значением Measure для родительского объекта текущего объекта. Этот же процесс продолжается в системе макета до тех пор, пока не будет достигнут корень дерева страницы или объекта. Во время этого процесса дочерние объекты могут возвращать больший размер DesiredSize , чем начальный availableSize , чтобы указать, что дочернему объекту требуется больше места. Это может быть обработано в вашей собственной реализации, внедрив прокручиваемую область, изменив размер родительского элемента управления, установив определенный порядок размещения или любое количество решений для измерения или упорядочения содержимого, которое может отличаться в зависимости от предполагаемой функциональности контейнера макета.