Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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.
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.
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.
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.
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 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.
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
.NET Desktop feedback