UIElement.MeasureCore(Size) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
При переопределении в производном классе предоставляет логику измерений для правильного определения размеров данного элемента, с учетом размера каждого из содержащихся в нем дочерних элементов.
protected:
virtual System::Windows::Size MeasureCore(System::Windows::Size availableSize);
protected virtual System.Windows.Size MeasureCore (System.Windows.Size availableSize);
abstract member MeasureCore : System.Windows.Size -> System.Windows.Size
override this.MeasureCore : System.Windows.Size -> System.Windows.Size
Protected Overridable Function MeasureCore (availableSize As Size) As Size
Параметры
- availableSize
- Size
Доступный размер, который может быть выделен родительским элементом для дочернего.
Возвращаемое значение
Желательный размер этого элемента в макете.
Примеры
Типичный переопределение MeasureCore следует этому приблизительному шаблону (не вызывается VisualChildren
встроенная коллекция; VisualChildren
это заполнитель, представляющий любую дочернюю коллекцию, которую поддерживает элемент).
protected override Size MeasureCore(Size availableSize)
{
foreach (UIElement child in VisualChildren)
{
child.Measure(availableSize);
// call some method on child that adjusts child size if needed
_cache.StoreInfoAboutChild(child);
}
Size desired = CalculateBasedOnCache(_cache);
return desired;
}
Protected Overrides Function MeasureCore(ByVal availableSize As Size) As Size
For Each child As UIElement In VisualChildren
child.Measure(availableSize)
' call some method on child that adjusts child size if needed
_cache.StoreInfoAboutChild(child)
Next child
Dim desired As Size = CalculateBasedOnCache(_cache)
Return desired
End Function
Необходимо вызвать Measure каждый дочерний элемент.
Как правило, реализация должна кэшировать сведения об измерениях MeasureCore между вызовами и ArrangeCore вызовами метода в одном элементе.
Вызов базовых реализаций MeasureCore не является обязательным, но может быть подходящим, если базовая реализация предоставляет необходимую возможность макета.
Measure Вызовы дочерних элементов должны передаваться
availableSize
как родительские, так и подмножество области в зависимости от типа макета, который поддерживает родительский элемент. Например, было бы допустимо удалить область для границы или заполнения элемента, полосы прокрутки или пользовательского элемента управления.
Комментарии
Чаще всего наследуется элемент, FrameworkElement а не UIElement. Если вы наследуете, FrameworkElementобратите внимание, что переопределение MeasureCore на FrameworkElement запечатывает MeasureCore метод. Таким образом, переопределяется MeasureCore только в качестве средства изменения характеристик меры макета, если вы наследуете наследование UIElement , которое не включает FrameworkElement. Это может быть так, если вы пытаетесь создать собственную реализацию на уровне ядра WPF. В противном случае, если вы наследуете от FrameworkElement, шаблон реализации для поведения Measure является FrameworkElement реализацией .MeasureOverride.
Родительский элемент с дочерними элементами должен вызываться Measure для каждого дочернего элемента, в противном случае эти дочерние элементы не имеют размера или упорядочения и фактически исчезают из макета.
Примечания для тех, кто наследует этот метод
Реализации должны иметь возможность обрабатывать значение, предоставленное для availableSize
этого бесконечно. Бесконечное значение указывает на отсутствие запрошенных ограничений и фактически откладывает выбор измерения родительскому элементу с помощью рекурсивных вызовов Measure.
Реализации могут рассматривать значение, предоставленное для availableSize
мягкого ограничения. Дочерний элемент может указать больший размер, даже если другие аспекты кода приложения смогли определить текущий фактический размер родительского элемента. Запрос большого размера — это соглашение, указывающее, что дочерний элемент запрашивает, может ли родительский элемент поддерживать прокрутку содержимого в области отображения содержимого.