Développer Réduire

UIElement.Arrange Method

Positionne les objets enfants et détermine une taille pour un UIElement. Les objets parents qui implémentent la disposition personnalisée de leurs éléments enfants doivent appeler cette méthode à partir de leurs implémentations de la substitution de la disposition pour former une mise à jour de disposition récursive.

Syntaxe


public void Arrange(
  Rect finalRect
)

Paramètres

finalRect

Type: Rect

La taille finale que le parent calcule pour l'enfant dans la disposition, fournie sous forme de valeur Rect.

Remarques

L'appel de Arrange occasionne éventuellement une implémentation ArrangeOverride de cette classe spécifique. Sinon, la plupart des classes FrameworkElement ont un comportement de disposition par défaut implicite pour Arrange.

Le calcul du positionnement de la mise en page initiale dans une interface utilisateur XAML se compose respectivement d'un appel Measure et d'un appel Arrange. Pendant l'appel à Measure, le système de disposition détermine les spécifications de taille d'un élément à l'aide de la mesure availableSize. Pendant l'appel de Arrange, le système de disposition finalise la taille et la position du cadre englobant d'un élément.

Lorsqu'une disposition est produite la première fois, un appel de Measure a toujours lieu avant Arrange. Toutefois, après la première passe de disposition, un appel Arrange peut se produire sans Measure qui le précède. Cela peut se produire lorsqu'une propriété qui affecte uniquement Arrange est modifiée (par exemple l'alignement), ou lorsque le parent reçoit une méthode Arrange sans méthode Measure.

Un appel Measure ne validera pas automatiquement les informations Arrange. Les actualisations de la disposition se produisent généralement de façon asynchrone (à un moment déterminé par le système de disposition). Un élément peut ne pas refléter immédiatement les modifications apportées à des propriétés qui affectent le dimensionnement des éléments (telles que Width).

Les mises à jour de la disposition peuvent être forcées par le code d'application au lieu de dépendre du comportement du système de disposition intégré, en utilisant la méthode UpdateLayout. Toutefois, cela n'est pas recommandé. Cela est généralement inutile et peut entraîner des performances médiocres en cas d'utilisation excessive. Dans de nombreux cas où l'appel à UpdateLayout à partir du code d'application peut s'avérer utile en raison des modifications apportées aux propriétés, le système de disposition peut être déjà en train de traiter les mises à jour. Le système de disposition a également des optimisations pour le traitement des cascades de modifications de disposition via des relations parent-enfant, et l'appel de UpdateLayout peut fonctionner avec ces optimisations. Toutefois, il est possible de rencontrer des scénarios de disposition plus compliqués où il est préférable d'appeler UpdateLayout pour résoudre un problème de synchronisation ou un autre problème de disposition. Utilisez-le juste délibérément et avec modération.

Exemples

Cet exemple montre comment utiliser Arrange dans une implémentation d'ArrangeOverride. Le principe de base est que vous devez interroger DesiredSize sur un élément sur lequel vous tentez d'appeler Arrange afin d'obtenir une valeur pour finalRect, à moins que votre implémentation de disposition n'ait une conception spécifique qui modifie ou ignore la taille voulue avant de la passer sous forme de finalRect.


// 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);
}


Configuration requise

Client minimal pris en charge

Windows 8

Serveur minimal pris en charge

Windows Server 2012

Espace de noms

Windows.UI.Xaml
Windows::UI::Xaml [C++]

Métadonnées

Windows.winmd

Voir aussi

UIElement

 

 

Afficher:
© 2014 Microsoft. Tous droits réservés.