Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.
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.
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.
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.
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
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.
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
.NET Desktop feedback