Freigeben über


Gewusst wie: Erstellen eines benutzerdefinierten Bereichselements

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 panelDesiredSize As Size = New Size()
        ' In our example, we just have one child. 
        ' Report that our panel requires just the size of its only child.
        For Each child As UIElement In InternalChildren
            child.Measure(availableSize)
            panelDesiredSize = child.DesiredSize
        Next
        Return panelDesiredSize
    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 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
    }
}
   public: 
      ref class PlotPanel : Panel {

      public: 
         PlotPanel () {};

      protected: 
         // Override the default Measure method of Panel
         virtual Size MeasureOverride(Size availableSize) override
         {
             Size^ panelDesiredSize = gcnew Size();

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

      protected: 
         virtual System::Windows::Size ArrangeOverride (Size finalSize) override 
         {
            for each (UIElement^ child in InternalChildren)
            {
               double x = 50;
               double y = 50;
               child->Arrange(Rect(Point(x, y), child->DesiredSize));
            }
            return finalSize;
         };
      };

Siehe auch

Referenz

Panel

Konzepte

Übersicht über Panel-Elemente

Weitere Ressourcen

Erstellen eines Beispiels für einen Bereich mit benutzerdefiniertem Inhaltsumbruch