Delen via


Opgemaakte tekst tekenen

Dit onderwerp bevat een overzicht van de functies van het FormattedText object. Dit object biedt laag-niveau controle voor het tekenen van tekst in WPF-toepassingen (Windows Presentation Foundation).

Overzicht van technologie

Met FormattedText het object kunt u tekst met meerdere regels tekenen, waarin elk teken in de tekst afzonderlijk kan worden opgemaakt. In het volgende voorbeeld ziet u tekst waarop verschillende indelingen zijn toegepast.

Tekst die wordt weergegeven met het object FormattedText

Opmerking

Voor deze ontwikkelaars die migreren vanuit de Win32-API, bevat de tabel in de sectie Win32-migratie de Win32 DrawText-vlaggen en het geschatte equivalent in Windows Presentation Foundation (WPF).

Redenen voor het gebruik van opgemaakte tekst

WPF bevat meerdere besturingselementen voor het tekenen van tekst naar het scherm. Elk besturingselement is gericht op een ander scenario en heeft een eigen lijst met functies en beperkingen. Over het algemeen moet het element TextBlock worden gebruikt wanneer beperkte tekstondersteuning vereist is, zoals een korte zin in een gebruikersinterface (UI). Label kan worden gebruikt wanneer minimale tekstondersteuning vereist is. Zie Documenten in WPF voor meer informatie.

Het FormattedText object biedt meer tekstopmaakfuncties dan WPF-tekstbesturingselementen (Windows Presentation Foundation) en kan handig zijn in gevallen waarin u tekst als decoratief element wilt gebruiken. Zie de volgende sectie Opgemaakte tekst converteren naar een geometrie voor meer informatie.

Daarnaast is het FormattedText object handig voor het maken van tekstgerichte DrawingVisual-afgeleide objecten. DrawingVisual is een lichtgewicht tekenklasse die wordt gebruikt om vormen, afbeeldingen of tekst weer te geven. Zie Hit Test Using DrawingVisuals Sample voor meer informatie.

Het object FormattedText gebruiken

Als u opgemaakte tekst wilt maken, roept u de FormattedText constructor aan om een FormattedText object te maken. Nadat u de oorspronkelijk opgemaakte tekenreeks hebt gemaakt, kunt u een reeks opmaakstijlen toepassen.

Gebruik de MaxTextWidth eigenschap om de tekst te beperken tot een specifieke breedte. De tekst loopt automatisch terug om te voorkomen dat de opgegeven breedte wordt overschreden. Gebruik de MaxTextHeight eigenschap om de tekst te beperken tot een specifieke hoogte. In de tekst wordt een beletselteken weergegeven, '...' voor de tekst die de opgegeven hoogte overschrijdt.

Tekst weergegeven met tekstterugloop en beletselteken.

U kunt meerdere opmaakstijlen toepassen op een of meer tekens. U kunt bijvoorbeeld zowel de SetFontSize als SetForegroundBrush de methoden aanroepen om de opmaak van de eerste vijf tekens in de tekst te wijzigen.

In het volgende codevoorbeeld wordt een FormattedText object gemaakt en worden vervolgens verschillende opmaakstijlen toegepast op de tekst.

protected override void OnRender(DrawingContext drawingContext)
{
    string testString = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor";

    // Create the initial formatted text string.
    FormattedText formattedText = new FormattedText(
        testString,
        CultureInfo.GetCultureInfo("en-us"),
        FlowDirection.LeftToRight,
        new Typeface("Verdana"),
        32,
        Brushes.Black);

    // Set a maximum width and height. If the text overflows these values, an ellipsis "..." appears.
    formattedText.MaxTextWidth = 300;
    formattedText.MaxTextHeight = 240;

    // Use a larger font size beginning at the first (zero-based) character and continuing for 5 characters.
    // The font size is calculated in terms of points -- not as device-independent pixels.
    formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5);

    // Use a Bold font weight beginning at the 6th character and continuing for 11 characters.
    formattedText.SetFontWeight(FontWeights.Bold, 6, 11);

    // Use a linear gradient brush beginning at the 6th character and continuing for 11 characters.
    formattedText.SetForegroundBrush(
                            new LinearGradientBrush(
                            Colors.Orange,
                            Colors.Teal,
                            90.0),
                            6, 11);

    // Use an Italic font style beginning at the 28th character and continuing for 28 characters.
    formattedText.SetFontStyle(FontStyles.Italic, 28, 28);

    // Draw the formatted text string to the DrawingContext of the control.
    drawingContext.DrawText(formattedText, new Point(10, 0));
}
Protected Overrides Sub OnRender(ByVal drawingContext As DrawingContext)
    Dim testString As String = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor"

    ' Create the initial formatted text string.
    Dim formattedText As New FormattedText(testString, CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, New Typeface("Verdana"), 32, Brushes.Black)

    ' Set a maximum width and height. If the text overflows these values, an ellipsis "..." appears.
    formattedText.MaxTextWidth = 300
    formattedText.MaxTextHeight = 240

    ' Use a larger font size beginning at the first (zero-based) character and continuing for 5 characters.
    ' The font size is calculated in terms of points -- not as device-independent pixels.
    formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5)

    ' Use a Bold font weight beginning at the 6th character and continuing for 11 characters.
    formattedText.SetFontWeight(FontWeights.Bold, 6, 11)

    ' Use a linear gradient brush beginning at the 6th character and continuing for 11 characters.
    formattedText.SetForegroundBrush(New LinearGradientBrush(Colors.Orange, Colors.Teal, 90.0), 6, 11)

    ' Use an Italic font style beginning at the 28th character and continuing for 28 characters.
    formattedText.SetFontStyle(FontStyles.Italic, 28, 28)

    ' Draw the formatted text string to the DrawingContext of the control.
    drawingContext.DrawText(formattedText, New Point(10, 0))
End Sub

Maateenheid voor tekengrootte

Net als bij andere tekstobjecten in WPF-toepassingen (Windows Presentation Foundation), gebruikt het FormattedText object apparaatonafhankelijke pixels als maateenheid. De meeste Win32-toepassingen gebruiken echter punten als maateenheid. Als u weergavetekst wilt gebruiken in punteneenheden in WPF-toepassingen (Windows Presentation Foundation), moet u apparaatonafhankelijke eenheden (1/96e inch per eenheid) converteren naar punten. In het volgende codevoorbeeld ziet u hoe u deze conversie uitvoert.

// The font size is calculated in terms of points -- not as device-independent pixels.
formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5);
' The font size is calculated in terms of points -- not as device-independent pixels.
formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5)

Opgemaakte tekst converteren naar een geometrie

U kunt opgemaakte tekst converteren naar Geometry objecten, zodat u andere typen visueel interessante 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

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

Tekst met verschillende kleuren voor opvulling en omtrek

Tekst met afbeeldingspenseel toegepast op lijnen

Tekst met afbeeldingsborstel toegepast op pennenstreken en markeringen

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. Zie Overzichtstekst maken voor meer informatie.

U kunt opgemaakte tekst ook converteren naar een PathGeometry object en het object gebruiken om de tekst te markeren. U kunt bijvoorbeeld een animatie toepassen op het PathGeometry object, zodat de animatie het overzicht van de opgemaakte tekst volgt.

In het volgende voorbeeld ziet u opgemaakte tekst die is geconverteerd naar een PathGeometry object. Een geanimeerde ellips volgt het pad van de gerenderde tekst.

Bol die de padgeometrie van tekst volgt
Bol volgend het pad van de tekst

Zie How to: Create a PathGeometry Animation for Text (Een PathGeometry-animatie voor tekst maken) voor meer informatie.

U kunt andere interessante toepassingen voor opgemaakte tekst maken zodra deze is geconverteerd naar een PathGeometry object. U kunt bijvoorbeeld video knippen om hierin weer te geven.

Videoweergave in de padgeometrie van tekst

Win32-migratie

De functies van FormattedText tekentekst zijn vergelijkbaar met de functies van de functie Win32 DrawText. Voor deze ontwikkelaars die migreren vanuit de Win32-API, bevat de volgende tabel de Win32 DrawText-vlaggen en het geschatte equivalent in Windows Presentation Foundation (WPF).

DrawText-vlag WPF-equivalent Opmerkingen
DT_BOTTOM Height Gebruik de Height eigenschap om een geschikte Win32 DrawText -y-positie te berekenen.
DT_CALCRECT Height, Width Gebruik de Height en Width eigenschappen om de uitvoerrechthoek te berekenen.
DT_CENTER TextAlignment Gebruik de TextAlignment eigenschap met de waarde ingesteld op Center.
DT_EDITCONTROL Geen Niet vereist. De ruimtebreedte en de weergave van de laatste regel zijn hetzelfde als in de framework-editor.
ELLIPSIS_AAN_HET_EINDE Trimming Gebruik de Trimming eigenschap met de waarde CharacterEllipsis.

Gebruik WordEllipsis om Win32 DT_END_ELLIPSIS met DT_WORD_ELLIPSIS eindellips op te halen—in dit geval verschijnt de beletselpunt alleen bij woorden die niet op één regel passen.
DT_EXPAND_TABS Geen Niet vereist. Tabs worden automatisch uitgebreid tot stops om de 4 ems, wat ongeveer de breedte is van 8 taalonafhankelijke tekens.
DT_EXTERNALLEADING Geen Niet vereist. Externe voorloop wordt altijd opgenomen in lijnafstand. Gebruik de LineHeight eigenschap om een door de gebruiker gedefinieerde regelafstand te creëren.
DT_VERBERGVOORVOEGSEL Geen Wordt niet ondersteund. Verwijder de '&' uit de tekenreeks voordat u het FormattedText object maakt.
DT_LEFT TextAlignment Dit is de standaardtekstuitlijning. Gebruik de TextAlignment eigenschap met de waarde ingesteld op Left. (alleen WPF)
DT_MODIFYSTRING Geen Wordt niet ondersteund.
DT_NOCLIP VisualClip Knippen gebeurt niet automatisch. Als u tekst wilt knippen, gebruikt u de VisualClip eigenschap.
DT_NOFULLWIDTHCHARBREAK Geen Wordt niet ondersteund.
DT_NOPREFIX Geen Niet vereist. Het teken '&' in tekenreeksen wordt altijd behandeld als een normaal teken.
DT_PATHELLIPSIS Geen Gebruik de Trimming eigenschap met de waarde WordEllipsis.
DT_PREFIX Geen Wordt niet ondersteund. Als u onderstrepingstekens wilt gebruiken voor tekst, zoals een sneltoets of koppeling, gebruikt u de SetTextDecorations methode.
DT_PREFIXONLY Geen Wordt niet ondersteund.
DT_RIGHT TextAlignment Gebruik de TextAlignment eigenschap met de waarde ingesteld op Right. (alleen WPF)
DT_RTLREADING FlowDirection Stel de eigenschap FlowDirection in op RightToLeft.
DT_SINGLELINE Geen Niet vereist. FormattedText objecten gedragen zich als een enkele regelbesturing, tenzij de MaxTextWidth eigenschap is ingesteld of de tekst een regelterugloop/-invoer (CR/LF) bevat.
DT_TABSTOP Geen Geen ondersteuning voor door de gebruiker gedefinieerde tabstopposities.
DT_TOP Height Niet vereist. De belangrijkste reden is de standaardwaarde. Andere verticale positiewaarden kunnen worden gedefinieerd met behulp van de Height eigenschap om een geschikte Win32 DrawText -y-positie te berekenen.
DT_VCENTER Height Gebruik de Height eigenschap om een geschikte Win32 DrawText -y-positie te berekenen.
DT_WORDBREAK Geen Niet vereist. Woordbreking vindt automatisch plaats met FormattedText objecten. U kunt het niet uitschakelen.
DT_WORD_ELLIPSIS Trimming Gebruik de Trimming eigenschap met de waarde WordEllipsis.

Zie ook