Freigeben über


Gewusst wie: Erstellen von Text mit Kontur

Wenn Sie Textzeichenfolgen in einer Windows Presentation Foundation (WPF)-Anwendung mit Verzierungen versehen, verwenden Sie in den meisten Fällen Text in Form einer Auflistung diskreter Zeichen oder Symbole. Sie können beispielsweise einen Pinsel mit linearem Farbverlauf erstellen und auf die Foreground-Eigenschaft eines TextBox-Objekts anwenden. Wenn Sie das Textfeld anzeigen oder bearbeiten, wird der Pinsel mit linearem Farbverlauf automatisch auf den aktuellen Satz von Zeichen in der Textzeichenfolge angewendet.

Beispiel für die Anwendung eines Pinsel mit linearem Farbverlauf auf ein Textfeld

Angezeigter Text mit einem linearen Farbverlaufspinsel

Sie können Text aber auch in Geometry-Objekte umwandeln, sodass Sie andere optisch vielfältige Textarten erstellen können. Sie können beispielsweise auf Grundlage der Gliederung einer Textzeichenfolge ein Geometry-Objekt erstellen.

Beispiel für die Anwendung eines Pinsels mit linearem Farbverlauf auf die Konturgeometrie von Text

Textkontur mit einem linearen Farbverlaufspinsel

Wenn Text in ein Geometry-Objekt konvertiert wird, handelt es sich nicht mehr um eine Auflistung von Zeichen. Sie können die Zeichen in der Zeichenfolge nicht mehr ändern. Sie können jedoch die Darstellung des konvertierten Texts beeinflussen, indem Sie dessen Stricheigenschaften und Fülleigenschaften ändern. Der Strich bezieht sich auf die Kontur des konvertierten Texts und die Füllung auf den Bereich innerhalb der Kontur des konvertierten Texts.

In den folgenden Beispielen werden mehrere Verfahren zum Erstellen visueller Effekte durch Ändern des Strichs und der Füllung von konvertiertem Text veranschaulicht.

Beispiel für das Festlegen von verschiedenen Farben für Striche und Füllung

Text mit unterschiedlichen Farben für Füllung und Strich

Beispiel für die Anwendung eines Bildpinsels auf den Strich

Text mit auf Strich angewendeten Bildpinsel

Es ist auch möglich, das umgebende Feldrechteck oder die Hervorhebung des konvertierten Texts zu ändern. Im folgenden Beispiel wird das Erstellen visueller Effekte durch Ändern des Strichs und der Hervorhebung von konvertiertem Text veranschaulicht.

Beispiel für die Anwendung eines Bildpinsels auf den Strich und die Hervorhebung

Text mit auf Strich angewendeten Bildpinsel

Beispiel

Der Schlüssel bei der Konvertierung von Text in ein Geometry-Objekt liegt in der Verwendung des FormattedText-Objekts. Nachdem Sie dieses Objekt erstellt haben, können Sie den Text mit den Methoden BuildGeometry und BuildHighlightGeometry in Geometry-Objekte konvertieren. Die erste Methode gibt die Geometrie des formatierten Texts zurück und die zweite Methode die Geometrie des Felds, das den formatierten Text umgibt. Im folgenden Codebeispiel wird veranschaulicht, wie Sie ein FormattedText-Objekt erstellen, und wie Sie die Geometrien des formatierten Texts sowie seines umgebenden Felds abrufen.

        ''' <summary>
        ''' Create the outline geometry based on the formatted text.
        ''' </summary>
        Public Sub CreateText()
            Dim fontStyle As FontStyle = FontStyles.Normal
            Dim fontWeight As FontWeight = FontWeights.Medium

            If Bold = True Then
                fontWeight = FontWeights.Bold
            End If
            If Italic = True Then
                fontStyle = FontStyles.Italic
            End If

            ' Create the formatted text based on the properties set.
            Dim formattedText As New FormattedText(Text, CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, New Typeface(Font, fontStyle, fontWeight, FontStretches.Normal), FontSize, Brushes.Black) ' This brush does not matter since we use the geometry of the text.

            ' Build the geometry object that represents the text.
            _textGeometry = formattedText.BuildGeometry(New Point(0, 0))

            ' Build the geometry object that represents the text hightlight.
            If Highlight = True Then
                _textHighLightGeometry = formattedText.BuildHighlightGeometry(New Point(0, 0))
            End If
        End Sub
/// <summary>
/// Create the outline geometry based on the formatted text.
/// </summary>
public void CreateText()
{
    System.Windows.FontStyle fontStyle = FontStyles.Normal;
    FontWeight fontWeight = FontWeights.Medium;

    if (Bold == true) fontWeight = FontWeights.Bold;
    if (Italic == true) fontStyle = FontStyles.Italic;

    // Create the formatted text based on the properties set.
    FormattedText formattedText = new FormattedText(
        Text,
        CultureInfo.GetCultureInfo("en-us"),
        FlowDirection.LeftToRight,
        new Typeface(
            Font,
            fontStyle,
            fontWeight,
            FontStretches.Normal),
        FontSize,
        System.Windows.Media.Brushes.Black // This brush does not matter since we use the geometry of the text. 
        );

    // Build the geometry object that represents the text.
    _textGeometry = formattedText.BuildGeometry(new System.Windows.Point(0, 0));

    // Build the geometry object that represents the text hightlight.
    if (Highlight == true)
    {
        _textHighLightGeometry = formattedText.BuildHighlightGeometry(new System.Windows.Point(0, 0));
    }
}

Um die abgerufenen Geometry-Objekte anzuzeigen, müssen Sie auf den DrawingContext des Objekts zugreifen, das den konvertierten Text anzeigt. In diesen Codebeispielen wird dazu ein benutzerdefiniertes Steuerelementobjekt erstellt. Dieses Objekt wird von einer Klasse abgeleitet, die benutzerdefiniertes Rendering unterstützt.

Um Geometry-Objekte im benutzerdefinierten Steuerelement anzuzeigen, stellen Sie eine Überschreibung für die OnRender-Methode bereit. Die überschriebene Methode sollte die DrawGeometry-Methode verwenden, um die Geometry-Objekte zu zeichnen.

        ''' <summary>
        ''' OnRender override draws the geometry of the text and optional highlight.
        ''' </summary>
        ''' <param name="drawingContext">Drawing context of the OutlineText control.</param>
        Protected Overrides Sub OnRender(ByVal drawingContext As DrawingContext)
            ' Draw the outline based on the properties that are set.
            drawingContext.DrawGeometry(Fill, New Pen(Stroke, StrokeThickness), _textGeometry)

            ' Draw the text highlight based on the properties that are set.
            If Highlight = True Then
                drawingContext.DrawGeometry(Nothing, New Pen(Stroke, StrokeThickness), _textHighLightGeometry)
            End If
        End Sub
/// <summary>
/// OnRender override draws the geometry of the text and optional highlight.
/// </summary>
/// <param name="drawingContext">Drawing context of the OutlineText control.</param>
protected override void OnRender(DrawingContext drawingContext)
{
    // Draw the outline based on the properties that are set.
    drawingContext.DrawGeometry(Fill, new System.Windows.Media.Pen(Stroke, StrokeThickness), _textGeometry);

    // Draw the text highlight based on the properties that are set.
    if (Highlight == true)
    {
        drawingContext.DrawGeometry(null, new System.Windows.Media.Pen(Stroke, StrokeThickness), _textHighLightGeometry);
    }
}

Siehe auch

Konzepte

Zeichnen von formatiertem Text