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