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 для настройки логики передачи "Упорядочить" для пользовательской реализации панели. Обратите внимание, в частности, на эти аспекты кода:

  • Выполняет итерацию над детьми.
  • Для каждого дочернего элемента вызовы "Упорядочить", используя прямоугольник , где высота и ширина основаны на DesiredSize, а X и Y основаны на логике, относящуюся к панели.
  • Возвращает его размер (в этом случае эта простая панель возвращает фиксированный размер, а не размер, вычисляемый при накоплении параметров упорядоченного значения Rect ).
// 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 обеспечивает поведение для Упорядочивания, если каждый раз вызывается логикой внутреннего макета или кодом собственного приложения, включая любые методы ArrangeOverride для других классов. Если вы создаете шаблонный элемент управления, логика ArrangeOverride определяет определенную логику макета макета элемента управления "Упорядочить".

Общая структура процесса макета элементов при выполнении приложения состоит из двух шагов: прохода Measure, а затем передачи "Упорядочить". Управление авторами (или авторами панелей), которые хотят настроить передачу макета "Упорядочить" для обработки макета, следует переопределить ArrangeOverride. Шаблон реализации должен вызывать "Упорядочить " для каждого видимого дочернего объекта и передавать окончательный требуемый размер для каждого дочернего объекта в качестве параметра finalRect . Если упорядочение не вызывается, дочерний объект не отображается.

Несколько существующих непечатанных классов предоставляют переопределение реализаций этого метода. Известные из них включают StackPanel и Grid. Как правило, поведение ArrangeOverride создает окончательный размер , который не нарушает пользовательские значения, которые помещаются в сам контейнер макета. Например, finalSize обычно не превышает высоту и ширину контейнера, что соответствует значениям Margin или Padding , влияющим на область содержимого. Элементы управления, которые специально имеют сценарий превышения размера контейнера, могут возвращать большее значение, но любой пользователь, использующий этот элемент управления, должен учитывать проблемы с вырезкой и размещением, которые приводят к нему. Значение, которое передает реализация ArrangeOverride для каждого дочернего объекта, обычно является значением, заданным в DesiredSize предыдущим вызовом Measure .

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

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