FrameworkElement.ArrangeOverride Method

Fournit le comportement de la passe de réorganisation ("Arrange") de la disposition. Les classes peuvent substituer cette méthode pour définir leur propre comportement lors de la passe de réorganisation ("Arrange").

Syntaxe


protected virtual Size ArrangeOverride(
  Size finalSize
)

Paramètres

finalSize

Type: Size

Dernière zone dans le parent que cet objet doit utiliser pour se réorganiser et réorganiser ses enfants.

Valeur de retour

Type: Size

Taille réelle utilisée une fois que l'élément est réorganisé dans la disposition.

Remarques

Cette méthode a une implémentation par défaut qui exécute la disposition intégrée pour la plupart des classes dérivées FrameworkElement. ArrangeOverride fournit le comportement de Arrange, chaque fois que Arrange est appelé par la logique de disposition interne ou le code de votre propre application, y compris toutes les méthodes ArrangeOverride que vous utilisez pour d'autres classes. Si vous produisez un contrôle basé sur un modèle, la logique ArrangeOverride définit la logique de disposition de passe de réorganisation ("Arrange") spécifique de votre contrôle.

La conception générale de la façon dont les éléments traversent un processus de disposition lorsque votre application fonctionne se divise en deux étapes : une passe "Measure", puis une passe "Arrange". Les auteurs de contrôle (ou auteurs de panneaux) qui veulent personnaliser la passe de réorganisation ("Arrange") du traitement de la disposition doivent substituer ArrangeOverride. Le modèle d'implémentation doit appeler Arrange sur chaque objet enfant visible et passer la taille finale souhaitée de chaque objet enfant en tant que paramètre finalRect. Si Arrange n'est pas appelé, l'objet enfant n'est pas rendu.

Plusieurs classes non-sealed existantes fournissent les implémentations de substitution de cette méthode. Les plus remarquables sont StackPanel et Grid. En général, le comportement de ArrangeOverride produit une finalSize qui ne viole aucune des valeurs définies par l'utilisateur placées sur le conteneur de disposition lui-même. Par exemple, finalSize n'est généralement pas supérieure aux valeurs Height et Width du conteneur, représentant les valeurs Margin ou Padding qui affectent la zone de contenu. Les contrôles qui utilisent un scénario spécifique pour dépasser la taille de conteneur peuvent retourner une valeur supérieure, mais toute personne qui utilise ce contrôle est responsable des problèmes de découpage et positionnement qui en résultent. La valeur qu'une implémentation ArrangeOverride passe à Arrange pour chaque objet enfant est généralement la valeur définie dans DesiredSize par l'appel précédent de Measure.

Exemples

Cet exemple implémente ArrangeOverride pour personnaliser la logique de passe "Arrange" pour une implémentation de panneau personnalisé. Notez en particulier les aspects suivants du code :

  • Itère au sein des enfants.

  • Pour chaque enfant, appelle Arrange, en utilisant un Rect pour lequel Height et Width sont basés sur DesiredSize, et X et Y sont basés sur la logique spécifique au panneau.

  • Retourne sa taille (dans ce cas, ce panneau simple retourne une taille fixe plutôt qu'une taille calculée en additionnant les mesures de valeur Rect organisées).


// 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

FrameworkElement
Arrange
MeasureOverride
Démarrage rapide : définition des dispositions

 

 

Afficher:
© 2014 Microsoft