Kreslení formátovaného textu
Toto téma obsahuje přehled funkcí objektu FormattedText . Tento objekt poskytuje ovládací prvek nízké úrovně pro kreslení textu v aplikacích WINDOWS Presentation Foundation (WPF).
Přehled technologií
Objekt FormattedText umožňuje nakreslit víceřádkový text, ve kterém může být každý znak textu individuálně formátován. Následující příklad ukazuje text s několika použitými formáty.
Poznámka:
Pro ty vývojáře, kteří migrují z rozhraní API Win32, obsahuje tabulka v části Migrace Win32 příznaky Win32 DrawText a přibližný ekvivalent ve Windows Presentation Foundation (WPF).
Důvody použití formátovaného textu
WPF obsahuje více ovládacích prvků pro kreslení textu na obrazovku. Každý ovládací prvek se zaměřuje na jiný scénář a má vlastní seznam funkcí a omezení. Obecně platí, že prvek by se měl použít v případě, TextBlock že je vyžadována omezená podpora textu, například stručná věta v uživatelském rozhraní. Label lze použít v případě, že je vyžadována minimální podpora textu. Další informace naleznete v tématu Dokumenty ve WPF.
Objekt FormattedText poskytuje větší funkce formátování textu než textové ovládací prvky WPF (Windows Presentation Foundation) a může být užitečné v případech, kdy chcete text použít jako dekorativní prvek. Další informace naleznete v následující části Převod formátovaného textu na geometrii.
Objekt je navíc FormattedText užitečný pro vytváření textově orientovaných DrawingVisual-odvozených objektů. DrawingVisual je jednoduchá třída kreslení, která se používá k vykreslení obrazců, obrázků nebo textu. Další informace naleznete v tématu Hit Test Using DrawingVisuals Sample.
Použití objektu FormattedText
Chcete-li vytvořit formátovaný text, zavolejte FormattedText konstruktor k vytvoření objektu FormattedText . Po vytvoření počátečního formátovaného textového řetězce můžete použít rozsah stylů formátování.
MaxTextWidth Vlastnost slouží k omezení textu na určitou šířku. Text se automaticky zalomí, aby nepřekračoval zadanou šířku. MaxTextHeight Vlastnost použijte k omezení textu na určitou výšku. Text zobrazí tři tečky, "..." pro text, který překračuje zadanou výšku.
U jednoho nebo více znaků můžete použít více stylů formátování. Můžete například volat jak metody SetFontSizeSetForegroundBrush , tak i změnit formátování prvních pěti znaků v textu.
Následující příklad kódu vytvoří FormattedText objekt a pak na text použije několik stylů formátování.
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ěrná jednotka velikosti písma
Stejně jako u jiných textových objektů v aplikacích FormattedText Windows Presentation Foundation (WPF) používá objekt jako měrnou jednotku pixely nezávislé na zařízení. Většina aplikací Win32 ale používá body jako měrnou jednotku. Pokud chcete použít zobrazovaný text v jednotkách bodů v aplikacích Windows Presentation Foundation (WPF), musíte převést jednotky nezávislé na zařízení (1/96 palce na jednotku) na body. Následující příklad kódu ukazuje, jak provést tento převod.
// 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)
Převod formátovaného textu na geometrii
Formátovaný text můžete převést na Geometry objekty, což vám umožní vytvářet další typy vizuálně zajímavého textu. Můžete například vytvořit Geometry objekt založený na obrysu textového řetězce.
Následující příklady ilustrují několik způsobů, jak vytvořit zajímavé vizuální efekty úpravou tahu, výplně a zvýraznění převedeného textu.
Když je text převeden na Geometry objekt, už se nejedná o kolekci znaků – znaky v textovém řetězci nelze upravovat. Vzhled převedeného textu ale můžete ovlivnit úpravou jeho vlastností tahu a výplně. Tah odkazuje na obrys převedeného textu; výplň odkazuje na oblast uvnitř obrysu převedeného textu. Další informace naleznete v tématu Vytvoření obrysu textu.
Formátovaný text můžete také převést na PathGeometry objekt a použít ho ke zvýraznění textu. Například můžete použít animaci na PathGeometry objekt, aby animace následuje obrys formátovaného textu.
Následující příklad ukazuje formátovaný text, který byl převeden na PathGeometry objekt. Animované tři tečky se řídí cestou tahů vykresleného textu.
Sphere za geometrií dráhy textu
Další informace naleznete v tématu Postupy: Vytvoření animace PathGeometry pro text.
Po převodu na PathGeometry objekt můžete vytvořit další zajímavé použití pro formátovaný text. Video můžete například vystřihot, abyste ho mohli zobrazit.
Migrace Win32
Funkce FormattedText pro kreslení textu jsou podobné funkcím funkce Win32 DrawText. Pro ty vývojáře, kteří migrují z rozhraní API Win32, uvádí následující tabulka příznaky Win32 DrawText a přibližný ekvivalent ve Windows Presentation Foundation (WPF).
Příznak DrawText | Ekvivalent WPF | Notes |
---|---|---|
DT_BOTTOM | Height | Height Pomocí vlastnosti vypočítat odpovídající pozici Win32 DrawText 'y'. |
DT_CALCRECT | Height, Width | K výpočtu výstupního obdélníku použijte vlastnosti Height a Width vlastnosti. |
DT_CENTER | TextAlignment | TextAlignment Použijte vlastnost s hodnotou nastavenou na Center. |
DT_EDITCONTROL | Nic | Nepovinné. Šířka mezery a vykreslení posledního řádku jsou stejné jako v ovládacím prvku pro úpravy architektury. |
DT_END_ELsada LIP SIS | Trimming | Trimming Použijte vlastnost s hodnotou CharacterEllipsis. Umožňuje WordEllipsis získat Win32 DT_END_ELsada LIP SIS s koncovými tečkami DT_WORD_Esada LIP SIS – v tomto případě se tři tečky znaků vyskytují jenom u slov, která se nevejdou na jeden řádek. |
DT_EXPAND_TABS | Nic | Nepovinné. Tabulátory se automaticky rozbalí tak, aby zastavovaly každých 4 ems, což je přibližně šířka 8 znaků nezávislých na jazyce. |
DT_EXTERNALLEADING | Nic | Nepovinné. Vnější úvodní čáry jsou vždy zahrnuty do řádkování. LineHeight Pomocí vlastnosti můžete vytvořit řádkování definované uživatelem. |
DT_HIDEPREFIX | Nic | Nepodporováno Před sestavením FormattedText objektu odeberte z řetězce znak '&'. |
DT_LEFT | TextAlignment | Toto je výchozí zarovnání textu. TextAlignment Použijte vlastnost s hodnotou nastavenou na Left. (pouze WPF) |
DT_MODIFYSTRING | Nic | Nepodporováno |
DT_NOCsada LIP | VisualClip | Výřez se neprovádí automaticky. Pokud chcete vystřižovat text, použijte VisualClip tuto vlastnost. |
DT_NOFULLWIDTHCHARBREAK | Nic | Nepodporováno |
DT_NOPREFIX | Nic | Nepovinné. Znak &' v řetězcích je vždy považován za normální znak. |
DT_PATHELsada LIP SIS | Nic | Trimming Použijte vlastnost s hodnotou WordEllipsis. |
DT_PREFIX | Nic | Nepodporováno Pokud chcete použít podtržítka pro text, například klávesu akcelerátoru nebo odkaz, použijte metodu SetTextDecorations . |
DT_PREFIXONLY | Nic | Nepodporováno |
DT_RIGHT | TextAlignment | TextAlignment Použijte vlastnost s hodnotou nastavenou na Right. (pouze WPF) |
DT_RTLREADING | FlowDirection | Nastavte vlastnost FlowDirection na RightToLeft. |
DT_SINGLELINE | Nic | Nepovinné. FormattedText objekty se chovají jako jeden řádek, pokud MaxTextWidth není nastavena vlastnost nebo text neobsahuje návratový znak řádku nebo informační kanál řádku (CR/LF). |
DT_TABSTOP | Nic | Nepodporuje uživatelsky definované pozice zarážky tabulátoru. |
DT_TOP | Height | Nepovinné. Hlavní odůvodnění je výchozí. Další svislé hodnoty umístění lze definovat pomocí Height vlastnosti pro výpočet odpovídající pozice Win32 DrawText y. |
DT_VCENTER | Height | Height Pomocí vlastnosti vypočítat odpovídající pozici Win32 DrawText 'y'. |
DT_WORDBREAK | Nic | Nepovinné. K automatickému dělení slov dochází u FormattedText objektů. Nemůžete ho zakázat. |
DT_WORD_ELsada LIP SIS | Trimming | Trimming Použijte vlastnost s hodnotou WordEllipsis. |
Viz také
.NET Desktop feedback