Dela via


Infoga formaterad text

Det här avsnittet innehåller en översikt över funktionerna i FormattedText-objektet. Det här objektet ger lågnivåkontroll för att rita text i WPF-program (Windows Presentation Foundation).

Tekniköversikt

Med objektet FormattedText kan du rita text med flera rader, där varje tecken i texten kan formateras individuellt. I följande exempel visas text som har flera format.

text som visas med formateradetextobjekt

Not

För utvecklare som migrerar från Win32-API:et visar tabellen i avsnittet Win32 Migration Win32 DrawText-flaggorna och den ungefärliga motsvarigheten i Windows Presentation Foundation (WPF).

Orsaker till att använda formaterad text

WPF innehåller flera kontroller för att rita text på skärmen. Varje kontroll är riktad mot ett annat scenario och har en egen lista över funktioner och begränsningar. I allmänhet bör TextBlock-elementet användas när begränsat textstöd krävs, till exempel en kort mening i ett användargränssnitt (UI). Label kan användas när minimalt textstöd krävs. Mer information finns i Dokument i WPF.

Det FormattedText objektet innehåller större textformateringsfunktioner än textkontrollerna i Windows Presentation Foundation (WPF) och kan vara användbart i de fall där du vill använda text som ett dekorativt element. Mer information finns i följande avsnitt Konvertera formaterad text till en geometri.

Dessutom är FormattedText-objektet användbart för att skapa textorienterade DrawingVisual-härledda objekt. DrawingVisual är en lätt ritningsklass som används för att återge former, bilder eller text. Mer information finns i Träfftest med DrawingVisuals-exempel.

Använda FormattedText-objektet

Om du vill skapa formaterad text anropar du konstruktorn FormattedText för att skapa ett FormattedText objekt. När du har skapat den första formaterade textsträngen kan du använda ett intervall med formateringsformat.

Använd egenskapen MaxTextWidth för att begränsa texten till en viss bredd. Texten omsluts automatiskt för att undvika att överskrida den angivna bredden. Använd egenskapen MaxTextHeight för att begränsa texten till en viss höjd. Texten visar en ellips, "..." för texten som överskrider den angivna höjden.

Text som visas med ordskred och ellips.

Du kan använda flera formateringsformat på ett eller flera tecken. Du kan till exempel anropa både metoderna SetFontSize och SetForegroundBrush för att ändra formateringen för de fem första tecknen i texten.

I följande kodexempel skapas ett FormattedText objekt och sedan används flera formateringsformat för texten.

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

Måttenhet för teckenstorlek

Precis som med andra textobjekt i WPF-program (Windows Presentation Foundation) använder FormattedText-objektet enhetsoberoende bildpunkter som måttenhet. De flesta Win32-program använder dock punkter som måttenhet. Om du vill använda visningstext i punkter i WPF-program (Windows Presentation Foundation) måste du konvertera enhetsoberoende enheter (1/96 tum per enhet) till punkter. I följande kodexempel visas hur du utför den här konverteringen.

// 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)

Konvertera formaterad text till en geometri

Du kan konvertera formaterad text till Geometry objekt, så att du kan skapa andra typer av visuellt intressant text. Du kan till exempel skapa ett Geometry objekt baserat på konturen av en textsträng.

textkontur med hjälp av en linjär gradientpensel

I följande exempel visas flera sätt att skapa intressanta visuella effekter genom att ändra linje, fyllning och markering av konverterad text.

Text med olika färger för fyllning och kontur

text med bildpenseln tillämpad på linje

Text med bildpensel tillämpad på streck och markering

När text konverteras till ett Geometry objekt är det inte längre en samling tecken– du kan inte ändra tecknen i textsträngen. Du kan dock påverka utseendet på den konverterade texten genom att ändra dess linje- och fyllningsegenskaper. Strecket refererar till konturen av den konverterade texten; fyllningen syftar på området inuti konturen för den konverterade texten. Mer information finns i Skapa konturtecknad text.

Du kan också konvertera formaterad text till ett PathGeometry objekt och använda objektet för att markera texten. Du kan till exempel använda en animering på objektet PathGeometry så att animeringen följer dispositionen i den formaterade texten.

I följande exempel visas formaterad text som har konverterats till ett PathGeometry objekt. En animerad ellips följer banan för de renderade textens streck.

Sfär som följer textens banas geometri
Sfär som följer textens sökvägsgeometri

Mer information finns i Så här gör du: Skapa en PathGeometry-animering för text.

Du kan skapa andra intressanta användningsområden för formaterad text när den har konverterats till ett PathGeometry objekt. Du kan till exempel klippa video för att visa den i den.

Video som visas i sökvägsgeometrin för text

Win32-migrering

Funktionerna i FormattedText för att rita text liknar funktionerna i funktionen Win32 DrawText. För utvecklare som migrerar från Win32-API:et listar följande tabell Win32 DrawText-flaggorna och den ungefärliga motsvarigheten i Windows Presentation Foundation (WPF).

DrawText-flagga WPF-motsvarighet Anteckningar
DT_BOTTOM Height Använd egenskapen Height för att beräkna en lämplig Win32 DrawText y-position.
DT_CALCRECT Height, Width Använd egenskaperna Height och Width för att beräkna utdatarektangeln.
DT_CENTER TextAlignment Använd egenskapen TextAlignment med värdet inställt på Center.
DT_EDITCONTROL Ingen Krävs inte. Utrymmesbredd och sista radrendering är samma som i ramverksredigeringskontrollen.
Slutpunkt med ellips Trimming Använd egenskapen Trimming med värdet CharacterEllipsis.

Använd WordEllipsis för att få Win32 DT_END_ELLIPSIS med DT_WORD_ELIPSIS slutellips – teckenellips uppstår här bara på ord som inte får plats på en rad.
DT_EXPAND_TABS Ingen Krävs inte. Flikar expanderas automatiskt till stopp var 4:e ems, vilket är ungefär bredden på 8 språkoberoende tecken.
DT_EXTERNALLEADING Ingen Krävs inte. Externt radavstånd ingår alltid i radavstånd. Använd egenskapen LineHeight för att skapa användardefinierat radavstånd.
DT_HIDEPREFIX Ingen Stöds inte. Ta bort&från strängen innan du skapar FormattedText-objektet.
DT_LEFT TextAlignment Det här är standardtextjusteringen. Använd egenskapen TextAlignment med värdet inställt på Left. (endast WPF)
DT_MODIFYSTRING Ingen Stöds inte.
DT_NOCLIP VisualClip Klippning sker inte automatiskt. Om du vill klippa ut text använder du egenskapen VisualClip.
DT_NOFULLWIDTHCHARBREAK Ingen Stöds inte.
DT_NOPREFIX Ingen Krävs inte. Tecknet "&" i strängar behandlas alltid som ett normalt tecken.
DT_PATHELLIPSIS Ingen Använd egenskapen Trimming med värdet WordEllipsis.
DT_PREFIX Ingen Stöds inte. Om du vill använda understreck för text, till exempel en acceleratornyckel eller länk, använder du metoden SetTextDecorations.
DT_PREFIXONLY Ingen Stöds inte.
DT_RIGHT TextAlignment Använd egenskapen TextAlignment med värdet inställt på Right. (endast WPF)
DT_RTLREADING FlowDirection Ange egenskapen FlowDirection till RightToLeft.
DT_SINGLELINE Ingen Krävs inte. FormattedText objekt fungerar som en enda radkontroll, såvida inte antingen egenskapen MaxTextWidth har angetts eller texten innehåller en vagnretur/radmatning (CR/LF).
DT_TABSTOP Ingen Inget stöd för användardefinierade tabbstopppositioner.
DT_TOP Height Krävs inte. Högsta motivering är standardvärdet. Andra lodräta positioneringsvärden kan definieras med hjälp av egenskapen Height för att beräkna en lämplig Win32 DrawText y-position.
DT_VCENTER Height Använd egenskapen Height för att beräkna en lämplig Win32 DrawText y-position.
DT_WORDBREAK Ingen Krävs inte. Ordbrytning sker automatiskt med FormattedText objekt. Du kan inte inaktivera det.
DT_ORD_ETTUTTRYCK Trimming Använd egenskapen Trimming med värdet WordEllipsis.

Se även