Megosztás a következőn keresztül:


Formázott szöveg rajzolása

Ez a témakör áttekintést nyújt az objektum funkcióiról FormattedText . Ez az objektum alacsony szintű vezérlést biztosít a szöveg rajzolásához a Windows Presentation Foundation (WPF) alkalmazásokban.

A technológia áttekintése

A FormattedText objektum lehetővé teszi többsoros szöveg rajzolására, amelyben a szöveg minden karaktere külön-külön formázható. Az alábbi példa olyan szöveget mutat be, amely több formátumot is alkalmaz.

Formátumszöveg objektummal megjelenített szöveg

Megjegyzés:

A Win32 API-ból migráló fejlesztők számára a Win32 Migrálás szakasz táblázata felsorolja a Win32 DrawText jelzőket és a Windows Presentation Foundation (WPF) hozzávetőleges megfelelőit.

A formázott szöveg használatának okai

A WPF több vezérlőt is tartalmaz, amelyekkel szöveget rajzolhat a képernyőre. Minden vezérlő más-más forgatókönyvre irányul, és saját funkciókkal és korlátozásokkal rendelkezik. Általában a TextBlock elemet kell használni, ha korlátozott szövegtámogatásra van szükség, például egy rövid mondatot egy felhasználói felületen (UI). Label akkor használható, ha minimális szövegtámogatásra van szükség. A további információkat lásd a Dokumentumok a WPF-ben.

Az FormattedText objektum nagyobb szövegformázási funkciókat biztosít, mint a Windows Presentation Foundation (WPF) szövegvezérlői, és hasznos lehet olyan esetekben, amikor a szöveget díszítő elemként szeretné használni. További információ: a formázott szöveg geometriává alakítása a következő szakaszban.

Emellett az FormattedText objektum szövegorientált DrawingVisual- származtatott objektumok létrehozásához is hasznos. DrawingVisual egy egyszerű rajzosztály, amely alakzatok, képek vagy szövegek megjelenítésére szolgál. További információért lásd a Érintési teszt DrawingVisuals példával.

A FormattedText objektum használata

Formázott szöveg létrehozásához hívja meg a FormattedText konstruktort egy FormattedText objektum létrehozásához. Miután létrehozta a kezdeti formázott szöveges sztringet, számos formázási stílust alkalmazhat.

MaxTextWidth A tulajdonsággal a szöveget egy adott szélességre korlátozhatja. A szöveg automatikusan körbefut, hogy ne lépje túl a megadott szélességet. MaxTextHeight A tulajdonság használatával a szöveget egy adott magasságra korlátozhatja. A szövegben látható egy ellipszis: "…" a megadott magasságot meghaladó szöveghez.

Szöveg megjelenítve tördeléssel és kivágással.

Több formázási stílust is alkalmazhat egy vagy több karakterre. Meghívhatja például a SetFontSize és a SetForegroundBrush metódust is a szöveg első öt karakterének formázásának módosításához.

Az alábbi példakód létrehoz egy FormattedText objektumot, majd több formázási stílust alkalmaz a szövegre.

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

Betűméret mértékegysége

A Windows Presentation Foundation (WPF) alkalmazások többi szöveges objektumához hasonlóan az FormattedText objektum is eszközfüggetlen képpontokat használ mértékegységként. A Legtöbb Win32-alkalmazás azonban pontokat használ mértékegységként. Ha a Windows Presentation Foundation (WPF) alkalmazásokban pontegységekben szeretné használni a megjelenítési szöveget, akkor az eszközfüggetlen egységeket (egységenként 1/96 hüvelyk) ponttá kell konvertálnia. Az alábbi példakód bemutatja, hogyan hajthatja végre ezt a konvertálást.

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

Formázott szöveg átalakítása geometriává

Formázott szöveget Geometry objektumokká alakíthat, így más típusú vizuálisan érdekes szövegeket hozhat létre. Létrehozhat például egy Geometry objektumot egy szöveges sztring körvonala alapján.

Szöveg körvonala lineáris színátmenetes ecsettel

Az alábbi példák számos módon szemléltetik, hogyan hozhat létre érdekes vizuális effektusokat a konvertált szöveg körvonalának, kitöltésének és kiemelésének módosításával.

Különböző színű szöveg kitöltéshez és kontúrhoz

Képecsettel alkalmazott körvonalas szöveg

Körvonalra alkalmazott képkefével ellátott szöveg és kiemelés

Ha a szöveg Geometry objektummá alakul, az már nem egy karaktergyűjtemény – a szövegsztringben lévő karakterek nem módosíthatók. A konvertált szöveg megjelenését azonban befolyásolhatja a körvonal és a kitöltés tulajdonságainak módosításával. A körvonal a konvertált szöveg körvonalára hivatkozik; a kitöltés a konvertált szöveg körvonalán belüli területre utal. További információ: Tagolt szöveg létrehozása.

Formázott szöveget is átalakíthat objektummá PathGeometry , és az objektummal kiemelheti a szöveget. Alkalmazhat például egy animációt az PathGeometry objektumra, hogy az animáció a formázott szöveg körvonalát kövesse.

Az alábbi példa egy objektummá konvertált PathGeometry formázott szöveget mutat be. Az animált ellipszis a renderelt szöveg vonásainak útvonalát követi.

Szöveg útvonalgeometriája utáni gömb
Szöveg útvonalgeometriája utáni gömb

További információért lásd a Hogyan készítsünk PathGeometry animációt szöveghez c. részt.

A formázott szöveg más érdekes felhasználási módjai is létrehozhatók, ha az objektummá PathGeometry lett alakítva. Például klipet is készíthet, hogy benne jelenjen meg.

A szöveg útvonalgeometriájában megjelenő videó

Win32 migrálás

FormattedText A rajzszöveg funkciói hasonlóak a Win32 DrawText függvény funkcióihoz. A Win32 API-ból migráló fejlesztők számára az alábbi táblázat a Win32 DrawText jelzőket és a Windows Presentation Foundation (WPF) hozzávetőleges megfelelőit sorolja fel.

DrawText-jelző WPF-ekvivalens Jegyzetek
DT_BOTTOM (alsó pozíció) Height Height A tulajdonság használatával kiszámíthat egy megfelelő Win32 DrawText 'y' pozíciót.
DT_CALCRECT Height, Width A kimeneti téglalapot a Height és Width tulajdonságok használatával számíthatja ki.
DT_CENTER TextAlignment Használja a TextAlignment tulajdonságot a következő értékre állítva Center: .
DT_EDITCONTROL Egyik sem Nem kötelező. A térszélesség és az utolsó vonal renderelése megegyezik a keretrendszer szerkesztési vezérlőjében megadottval.
DT_END_ELLIPSIS Trimming Használja a Trimming tulajdonságot az értékkel CharacterEllipsis.

A WordEllipsis használható a Win32 DT_END_ELLIPSIS és a DT_WORD_ELIPSIS végponti három pont megjelenítésére – ebben az esetben a három pont csak azokon a szavakon jelenik meg, amelyek nem férnek el egyetlen sorban.
DT_EXPAND_TABS Egyik sem Nem kötelező. A tabulátorok automatikusan ki vannak bővítve, minden 4 em-nyi helyen megállva, amely körülbelül 8, nyelvtől független karakter szélességének felel meg.
DT_EXTERNALLEADING Egyik sem Nem kötelező. Az külső vezető mindig szerepel a sorközben. LineHeight A tulajdonsággal felhasználó által definiált sorközt hozhat létre.
DT_HIDEPREFIX Egyik sem Nem támogatott. Az objektum létrehozása előtt távolítsa el a "&" karaktert a FormattedText sztringből.
DT_LEFT TextAlignment Ez az alapértelmezett szövegigazítás. Használja a TextAlignment tulajdonságot a következő értékre állítva Left: . (csak WPF)
DT_MODIFYSTRING Egyik sem Nem támogatott.
DT_NOCLIP VisualClip A kivágás nem történik meg automatikusan. Ha szöveget szeretne kivágni, használja a tulajdonságot VisualClip .
DT_NOFULLWIDTHCHARBREAK Egyik sem Nem támogatott.
DT_NOPREFIX Egyik sem Nem kötelező. A "&" karakter a sztringekben mindig normál karakterként van kezelve.
DT_PATHELLIPSIS Egyik sem Használja a Trimming tulajdonságot az értékkel WordEllipsis.
DT_PREFIX Egyik sem Nem támogatott. Ha aláhúzásjeleket szeretne használni szöveghez, például gyorsítókulcshoz vagy hivatkozáshoz, használja a metódust SetTextDecorations .
DT_PREFIXONLY Egyik sem Nem támogatott.
DT_RIGHT TextAlignment Használja a TextAlignment tulajdonságot a következő értékre állítva Right: . (csak WPF)
DT_RTLREADING FlowDirection Állítsa a FlowDirection tulajdonságot RightToLeftértékre.
DT_SINGLELINE Egyik sem Nem kötelező. FormattedText az objektumok egyetlen vonalvezérlőként működnek, kivéve, ha a MaxTextWidth tulajdonság be van állítva, vagy a szöveg egy kocsivissza/sorcsatornát (CR/LF) tartalmaz.
DT_TABSTOP Egyik sem A felhasználó által definiált tabulátorpozíciók nem kapnak támogatást.
DT_TOP Height Nem kötelező. A felső indoklás az alapértelmezett. Más függőleges pozicionálási értékek definiálhatók a tulajdonság használatával a Height megfelelő Win32 DrawText "y" pozíció kiszámításához.
DT_VCENTER Height Height A tulajdonság használatával kiszámíthat egy megfelelő Win32 DrawText 'y' pozíciót.
DT_WORDBREAK Egyik sem Nem kötelező. Az objektumokkal FormattedText a szótörés automatikusan történik. Nem tilthatja le.
DT_WORD_ELLIPSIS Trimming Használja a Trimming tulajdonságot az értékkel WordEllipsis.

Lásd még