Gewusst wie: Implementieren eines Adorners

Aktualisiert: November 2007

In diesem Beispiel wird die minimale Implementierung eines Adorners erläutert.

Hinweise für Implementierer

Beachten Sie, dass für Adorner kein Renderingverhalten festgelegt ist. Sicherzustellen, dass ein Adorner rendert, ist Aufgabe des Implementierers. Zur Implementierung von Renderingverhalten wird meistens die OnRenderSizeChanged-Methode überschrieben, und es werden ein oder mehrere DrawingContext-Objekte verwendet, um die Darstellung des Adorners wie gewünscht zu rendern (wie in diesem Beispiel gezeigt).

Beispiel

Beschreibung

Ein benutzerdefinierter Adorner wird erstellt, indem man eine Klasse implementiert, die von der abstrakten Adorner-Klasse erbt. Der Beispieladorner versieht einfach die Ecken eines UIElement mit Kreisen, indem er die OnRender-Methode überschreibt.

Code

Public Class SimpleCircleAdorner
    Inherits Adorner
    Sub New(ByVal adornedElement As UIElement)
        MyBase.New(adornedElement)
    End Sub

    Protected Overrides Sub OnRender(ByVal drawingContext As System.Windows.Media.DrawingContext)
        MyBase.OnRender(drawingContext)
        Dim adornedElementRect As New Rect(AdornedElement.DesiredSize)
        Dim renderBrush As New SolidColorBrush(Colors.Green)
        renderBrush.Opacity = 0.2
        Dim renderPen As New Pen(New SolidColorBrush(Colors.Navy), 1.5)
        Dim renderRadius As Double
        renderRadius = 5.0

        'Draw a circle at each corner.
        drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.TopLeft, renderRadius, renderRadius)
        drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.TopRight, renderRadius, renderRadius)
        drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.BottomLeft, renderRadius, renderRadius)
        drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.BottomRight, renderRadius, renderRadius)
    End Sub
End Class
// Adorners must subclass the abstract base class Adorner.
public class SimpleCircleAdorner : Adorner
{
  // Be sure to call the base class constructor.
  public SimpleCircleAdorner(UIElement adornedElement)
    : base(adornedElement) 
  { 
  }

  // A common way to implement an adorner's rendering behavior is to override the OnRender
  // method, which is called by the layout system as part of a rendering pass.
  protected override void OnRender(DrawingContext drawingContext)
  {
    Rect adornedElementRect = new Rect(this.AdornedElement.DesiredSize);

    // Some arbitrary drawing implements.
    SolidColorBrush renderBrush = new SolidColorBrush(Colors.Green);
    renderBrush.Opacity = 0.2;
    Pen renderPen = new Pen(new SolidColorBrush(Colors.Navy), 1.5);
    double renderRadius = 5.0;

    // Draw a circle at each corner.
    drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.TopLeft, renderRadius, renderRadius);
    drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.TopRight, renderRadius, renderRadius);
    drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.BottomLeft, renderRadius, renderRadius);
    drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.BottomRight, renderRadius, renderRadius);
  }
}

Siehe auch

Aufgaben

Beispiel zu SimpleCircleAdorner

Beispiel für das Hinzufügen und Entfernen von Adornern

Beispiel zu SimpleCircleAdorner

Konzepte

Übersicht über Adorner