Gewusst wie: Erstellen eines benutzerdefinierten Bereichselements

Aktualisiert: November 2007

Beispiel

In diesem Beispiel wird dargestellt, wie das Standardlayoutverhalten des Panel-Elements überschrieben werden kann und benutzerdefinierte Layoutelemente erstellt werden, die von Panel abgeleitet sind.

In diesem Beispiel wird ein einfaches benutzerdefiniertes Panel-Element (PlotPanel) definiert, das untergeordnete Elemente zwei fest programmierten x- und y-Koordinaten entsprechend positioniert. Außerdem werden in diesem Beispiel x und y auf 50 festgelegt, d. h. alle untergeordneten Elemente werden auf der x-Achse und auf der Y-Achse an dieser Position platziert.

Zur Implementierung von benutzerdefiniertem Panel-Verhalten werden in diesem Beispiel die Methoden MeasureOverride und ArrangeOverride angewendet. Jede Methode gibt die Size-Daten zurück, die zur Positionierung und zum Rendern von untergeordnete Elemente notwendig sind.

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

Das vollständige Beispiel finden Sie unter Beispiel für das Erstellen eines einfachen benutzerdefinierten Panel.

Siehe auch

Aufgaben

Erstellen eines Beispiels für einen Bereich mit benutzerdefiniertem Inhaltsumbruch

Konzepte

Übersicht über Panel-Elemente

Referenz

Panel