This article has been localized into Czech by the community.
Vykreslování textu WPF
V tomto článku rozebereme, proč se text ve WPF někdy vykresluje méně ostře, jak toto bylo později opraveno a jak vy sami můžete vykreslování textu řídit.
Jak jsme již v tomto tutoriálu řekli, ve srovnání s jinými frameworky pro UI, jako jsou WinForms, používající pro spoustu věcí Windows API, WPF dělá mnohem více věcí po svém. To se projevuje i při vykreslování textu – WinForms používá GDI API (grafické API) z Windows, kdežto WPF má svou vlastní implementaci pro vykreslování textu, která se lépe hodí pro animace a odpovídá hardwarově nezávislé povaze WPF.
Toto má bohužel za následek fakt, že text se vykresluje méně ostře, zejména pro malé velikosti písma. Pro programátory ve WPF to nějakou dobu představovalo docela velký problém, avšak naštěstí ve verzi .NET frameworku 4.0 dodal Microsoft do WPF enginu pro vykreslování textu řadu vylepšení. Díky tomu, pokud použijete tuto verzi nebo vyšší, bude váš text téměř tak dobrý jako při nativním rozlišení.
Možnosti kontroly vykreslování textu
Ve verzi .NET framework 4.0 se Microsoft také rozhodl, že programátorům poskytne větší kontrolu nad vykreslováním textu, a přidal třídu TextOptions a její vlastnosti TextFormattingMode a TextRenderingMode. Tím vám dal možnost určit konkrétně na úrovni ovládacího prvku, jak se text má formátovat a vykreslovat. Nejlépe je to vidět na příkladu, takže pro pochopení, jak můžete vykreslování textu pomocí těchto vlastností ovlivnit, si prohlédněte zdrojový kód a screenshoty níže.
Vlastnost TextFormattingMode
Pomocí vlastnosti TextFormattingMode můžete rozhodnout o tom, který algoritmus pro formátování textu se má použít. Můžete si zvolit mezi Ideal (výchozí hodnota) a Display. Za normálních okolností na tuto vlastnost nebudete sahat, protože nastavení Ideal se nejlépe hodí na většinu situací, avšak v některých případech, kdy potřebujete vykreslit velice malý text, může lepší výsledek dát nastavení Display. Tady je příklad, který tento rozdíl ozřejmí (jakkoliv je sotva patrný):
<Window x:Class="WpfTutorialSamples.Control_concepts.TextFormattingModeSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextFormattingModeSample" Height="200" Width="400">
<StackPanel Margin="10">
<Label TextOptions.TextFormattingMode="Ideal" FontSize="9">TextFormattingMode.Ideal, small text</Label>
<Label TextOptions.TextFormattingMode="Display" FontSize="9">TextFormattingMode.Display, small text</Label>
<Label TextOptions.TextFormattingMode="Ideal" FontSize="20">TextFormattingMode.Ideal, large text</Label>
<Label TextOptions.TextFormattingMode="Display" FontSize="20">TextFormattingMode.Display, large text</Label>
</StackPanel>
</Window>
Vlastnost TextRenderingMode
Vlastností TextRenderingMode říkáte, jaký algoritmus se při vykreslování textu použije pro antialiasing. Největšího účinku dosáhnete v kombinaci s nastavením Display u vlastnosti TextFormattingMode, což právě použijeme v následujícím příkladu pro ilustraci rozdílů:
<Window x:Class="WpfTutorialSamples.Control_concepts.TextRenderingModeSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextRenderingModeSample" Height="300" Width="400">
<StackPanel Margin="10" TextOptions.TextFormattingMode="Display">
<Label TextOptions.TextRenderingMode="Auto" FontSize="9">TextRenderingMode.Auto, small text</Label>
<Label TextOptions.TextRenderingMode="Aliased" FontSize="9">TextRenderingMode.Aliased, small text</Label>
<Label TextOptions.TextRenderingMode="ClearType" FontSize="9">TextRenderingMode.ClearType, small text</Label>
<Label TextOptions.TextRenderingMode="Grayscale" FontSize="9">TextRenderingMode.Grayscale, small text</Label>
<Label TextOptions.TextRenderingMode="Auto" FontSize="18">TextRenderingMode.Auto, large text</Label>
<Label TextOptions.TextRenderingMode="Aliased" FontSize="18">TextRenderingMode.Aliased, large text</Label>
<Label TextOptions.TextRenderingMode="ClearType" FontSize="18">TextRenderingMode.ClearType, large text</Label>
<Label TextOptions.TextRenderingMode="Grayscale" FontSize="18">TextRenderingMode.Grayscale, large text</Label>
</StackPanel>
</Window>
Jak jste viděli, výsledný text se vzhledově značně liší a zopakujme to ještě jednou: tyto změny se mají aplikovat pouze ve zvláštních případech.