UIElement.Measure(Size) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Обновляет элемент DesiredSizeпользовательского интерфейса. Как правило, объекты, реализующие настраиваемый макет для дочерних элементов макета, вызывают этот метод из собственных реализаций 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);
}
Комментарии
Вызов Measure потенциально достигает реализации MeasureOverride этого конкретного класса. В противном случае большинство классов FrameworkElement имеют неявное поведение макета по умолчанию для Measure.
AvailableSize может быть любым числом от нуля до бесконечного. Элементы, участвующие в макете, должны возвращать минимальный размер , необходимый для заданного доступного размера.
Вычисление начального расположения макета в пользовательском интерфейсе XAML состоит из вызова Measure и вызова упорядочивания в этом порядке. Во время вызова Measure система макета определяет требования к размеру элемента с помощью измерения availableSize . Во время вызова Упорядочивания система макета завершает размер и положение ограничивающего прямоугольника элемента.
При первом создании макета он всегда имеет вызов Measure, который происходит перед упорядочиванием. Однако после первого прохождения макета вызов упорядочивания может произойти без предыдущей меры. Это может произойти, когда свойство, влияющее только на упорядочение (например, выравнивание), или когда родитель получает упорядочение без меры .
Вызов Measure автоматически отменит любые сведения о организации . Обновления макета обычно выполняются асинхронно (во время, определяемого системой макета). Элемент может не сразу отражать изменения свойств, влияющих на размер элемента (например , Width).