Delen via


Procedure: Omlijnde tekst maken

In de meeste gevallen gebruikt u, wanneer u siertekenreeksen toevoegt aan teksttekenreeksen in uw WPF-toepassing (Windows Presentation Foundation), tekst in termen van een verzameling discrete tekens of glyphs. U kunt bijvoorbeeld een lineaire verloopborstel maken en deze toepassen op de eigenschap Foreground van een TextBox-object. Wanneer u het tekstvak weergeeft of bewerkt, wordt de lineaire verloopborstel automatisch toegepast op de huidige set tekens in de tekenreeks.

tekst weergegeven met een lineair kleurovergangsborstel

U kunt echter ook tekst converteren naar Geometry objecten, zodat u andere typen visueel opgemaakte tekst kunt maken. U kunt bijvoorbeeld een Geometry object maken op basis van de omtrek van een tekenreeks.

Tekstkader met behulp van een lineaire kleurovergangsborstel

Wanneer tekst wordt geconverteerd naar een Geometry-object, is het geen verzameling tekens meer. U kunt de tekens in de tekenreeks niet wijzigen. U kunt echter van invloed zijn op het uiterlijk van de geconverteerde tekst door de eigenschappen van de lijn en opvulling te wijzigen. De omtrek verwijst naar de rand van de geconverteerde tekst; de opvulling verwijst naar het gebied binnen de omtrek van de geconverteerde tekst.

In de volgende voorbeelden ziet u verschillende manieren om visuele effecten te maken door de lijn en opvulling van geconverteerde tekst te wijzigen.

Tekst met verschillende kleuren voor opvulling en omtrek

Tekst met afbeeldingspenseel toegepast op lijnen

Het is ook mogelijk om de rechthoek van het begrenzingsvak of de markering van de geconverteerde tekst te wijzigen. In het volgende voorbeeld ziet u een manier om visuele effecten te maken door de lijn en markering van geconverteerde tekst te wijzigen.

Tekst met afbeeldingsborstel toegepast op pennenstreken en markeringen

Voorbeeld

De sleutel voor het converteren van tekst naar een Geometry object is het gebruik van het FormattedText-object. Nadat u dit object hebt gemaakt, kunt u de methoden BuildGeometry en BuildHighlightGeometry gebruiken om de tekst te converteren naar Geometry objecten. De eerste methode retourneert de geometrie van de opgemaakte tekst; de tweede methode retourneert de geometrie van het begrenzingsvak van de opgemaakte tekst. In het volgende codevoorbeeld ziet u hoe u een FormattedText-object maakt en de geometrieën van de opgemaakte tekst en het begrenzingsvak ervan ophaalt.

/// <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 highlight.
    if (Highlight == true)
    {
        _textHighLightGeometry = formattedText.BuildHighlightGeometry(new System.Windows.Point(0, 0));
    }
}
''' <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 highlight.
    If Highlight = True Then
        _textHighLightGeometry = formattedText.BuildHighlightGeometry(New Point(0, 0))
    End If
End Sub

Als u de opgehaalde Geometry objecten wilt weergeven, moet u toegang krijgen tot de DrawingContext van het object dat de geconverteerde tekst weergeeft. In deze codevoorbeelden wordt deze toegang bereikt door een aangepast besturingsobject te maken dat is afgeleid van een klasse die door de gebruiker gedefinieerde rendering ondersteunt.

Als u Geometry objecten in het aangepaste besturingselement wilt weergeven, biedt dan een overschrijving voor de methode OnRender. Je overridden methode moet de DrawGeometry methode gebruiken om de Geometry objecten te renderen.

/// <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);
    }
}
''' <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

Zie OutlineTextControl.cs voor C# en OutlineTextControl.vb voor Visual Basicvoor de bron van het aangepaste gebruikersbeheerobject.

Zie ook