FrameworkElement.ArrangeOverride(Size) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет поведение для прохода "Упорядочить" макета. Классы могут переопределить этот метод, чтобы определить собственное поведение передачи "Упорядочить".
protected:
virtual Size ArrangeOverride(Size finalSize) = ArrangeOverride;
Size ArrangeOverride(Size const& finalSize);
protected virtual Size ArrangeOverride(Size finalSize);
function arrangeOverride(finalSize)
Protected Overridable Function ArrangeOverride (finalSize As Size) As Size
Параметры
- finalSize
- Size
Конечная область внутри родительского объекта, которую этот объект должен использовать для упорядочения себя и его дочерних элементов.
Возвращаемое значение
Фактический размер, используемый после упорядочения элемента в макете.
Примеры
В этом примере реализована функция ArrangeOverride для настройки логики передачи "Упорядочение" для реализации пользовательской панели. Обратите внимание, в частности, на следующие аспекты кода:
- Выполняет итерацию по дочерним элементам.
- Для каждого дочернего элемента вызывает Метод Упорядочить, используя прямоугольник , где Height и Width основаны на DesiredSize, а X и Y основаны на логике, относяскойся к панели.
- Возвращает размер (в данном случае эта простая панель возвращает фиксированный размер, а не размер, вычисленный при накоплении упорядоченных измерений прямоугольника ).
// Second arrange all children and return final size of panel
protected override Size ArrangeOverride(Size finalSize)
{
// Get the collection of children
UIElementCollection mychildren = Children;
// Get total number of children
int count = mychildren.Count;
// Arrange children
// We're only allowing 9 children in this panel. More children will get a 0x0 layout slot.
int i;
for (i = 0; i < 9; i++)
{
// Get (left, top) origin point for the element in the 3x3 block
Point cellOrigin = GetOrigin(i, 3, new Size(100, 100));
// Arrange child
// Get desired height and width. This will not be larger than 100x100 as set in MeasureOverride.
double dw = mychildren[i].DesiredSize.Width;
double dh = mychildren[i].DesiredSize.Height;
mychildren[i].Arrange(new Rect(cellOrigin.X, cellOrigin.Y, dw, dh));
}
// Give the remaining children a 0x0 layout slot
for (i = 9; i < count; i++)
{
mychildren[i].Arrange(new Rect(0, 0, 0, 0));
}
// Return final size of the panel
return new Size(300, 300);
}
Комментарии
Этот метод имеет реализацию по умолчанию, которая выполняет встроенный макет для большинства производных классов FrameworkElement . ArrangeOverride обеспечивает поведение для Arrange всякий раз, когда метод Arrange вызывается либо внутренней логикой макета, либо кодом вашего приложения, включая любые собственные методы ArrangeOverride для других классов. Если вы создаете шаблонный элемент управления, логика ArrangeOverride определяет логику макета передачи элемента управления "Упорядочить".
Общая схема того, как элементы проходят процесс макета при выполнении приложения, делится на два этапа: проход "Measure" и затем "Упорядочение". Авторы элементов управления (или авторы панелей), которые хотят настроить проход "Упорядочить" обработки макета, должны переопределить ArrangeOverride. Шаблон реализации должен вызывать метод Arrange для каждого видимого дочернего объекта и передавать окончательный требуемый размер для каждого дочернего объекта в качестве параметра finalRect . Если метод Arrange не вызывается, дочерний объект не отображается.
Некоторые существующие непечатанные классы предоставляют реализации переопределения этого метода. К известным из них относятся StackPanel и Grid. Как правило, поведение ArrangeOverride создает finalSize , который не нарушает пользовательские значения, размещенные в самом контейнере макета. Например, значение finalSize обычно не превышает значения Height и Width контейнера, учитывая значения Margin или Padding , влияющие на область содержимого. Элементы управления, которые специально имеют сценарий превышения размера контейнера, могут возвращать большее значение, но любой пользователь, использующий этот элемент управления, должен учитывать проблемы с вырезкой и размещением, возникающие в результате этого элемента управления. Значение, которое реализация ArrangeOverride передает в Arrange для каждого дочернего объекта, обычно является значением, заданным в DesiredSize предыдущим вызовом Measure .