Partager via


Comment : créer un élément Panel personnalisé

Mise à jour : novembre 2007

Exemple

Cet exemple montre comment substituer le comportement de disposition par défaut de l'élément Panel et créer des éléments de disposition personnalisés dérivés de Panel.

L'exemple définit un élément Panel personnalisé simple appelé PlotPanel qui positionne les éléments enfants d'après deux coordonnées x et y codées en dur. Dans cet exemple, x et y ont tous les deux la valeur 50 ; par conséquent, tous les éléments enfants sont positionnés à cet emplacement sur les axes x et y.

Pour implémenter des comportements Panel personnalisés, l'exemple utilise les méthodes MeasureOverride et ArrangeOverride. Chaque méthode retourne les données Size qui sont nécessaires pour positionner et restituer les éléments enfants.

Public Class PlotPanel
    Inherits Panel
    'Override the default Measure method of Panel.

    Protected Overrides Function MeasureOverride(ByVal availableSize As System.Windows.Size) As System.Windows.Size
        Dim childSize As Size = CType(availableSize, Size)
        For Each child As UIElement In InternalChildren
            child.Measure(childSize)
        Next
        Return MyBase.MeasureOverride(availableSize)
    End Function
    Protected Overrides Function ArrangeOverride(ByVal finalSize As System.Windows.Size) As System.Windows.Size
        For Each child As UIElement In InternalChildren
            Dim x As Double = 50
            Dim y As Double = 50
            child.Arrange(New Rect(New System.Windows.Point(x, y), child.DesiredSize))
        Next
        Return MyBase.ArrangeOverride(finalSize)
    End Function
End Class
public class PlotPanel : Panel
{
    // Default public constructor
    public PlotPanel()
        : base()
    {
    }

    // Override the default Measure method of Panel
    protected override Size MeasureOverride(Size availableSize)
    {
        Size panelDesiredSize = new Size();

        // In our example, we just have one child. 
        // Report that our panel requires just the size of its only child.
        foreach (UIElement child in InternalChildren)
        {
            child.Measure(availableSize);
            panelDesiredSize = child.DesiredSize;
        }

        return panelDesiredSize ;
    }
    protected override Size ArrangeOverride(Size finalSize)
    {
        foreach (UIElement child in InternalChildren)
        {
            double x = 50;
            double y = 50;

            child.Arrange(new Rect(new Point(x, y), child.DesiredSize));
        }
        return finalSize; // Returns the final Arranged size
    }
}

Pour l'exemple complet, consultez Créer un panneau personnalisé simple, exemple.

Voir aussi

Tâches

Créer un panneau d'habillage du contenu personnalisé, exemple

Concepts

Vue d'ensemble de Panel

Référence

Panel