This article has been localized into Slovak by the community.
Vykresľovanie textu vo WPF
V tomto článku budeme diskutovať o tom, prečo je text vo WPF niekedy viac rozmazaný, ako to bolo neskôr opravené a ako môžete sami ovládať vykresľovanie textu.
Ako už bolo uvedené, WPF robí oveľa viac vecí samo o sebe v porovnaní s inými UI frameworks, ako je WinForms, ktoré používajú Windows API pre veľa vecí. Tiež aj pokiaľ ide o vykresľovanie textu - WinForms používa GDI API od Windows, zatiaľ čo WPF má vlastnú implementáciu vykresľovania textu, lepšiu podporu animácií, ako aj nezávislosť od zariadenia.
Bohužiaľ to viedlo k tomu, že text bol trochu rozmazaný, najmä v malých veľkostiach písma. To bol na nejaký čas dosť veľký problém pre programátorov WPF, ale našťastie spoločnosť Microsoft urobila veľa vylepšení v technológii WPF rendering v .NET framework verzia 4.0. To znamená, že ak používate túto verziu, alebo vyššiu, text by mal byť takmer na pixel dokonalý.
Ovládanie vykresľovania textu
S platformou .NET Framework 4.0 sa spoločnosť Microsoft rozhodla poskytnúť programátorovi väčšiu kontrolu nad vykresľovaním textu zavedením triedy Textoptions a vlastností TextFormattingMode a TextRenderingMode. To vám umožní rozhodnúť sa, ako má byť text naformátovaný a vykresľovaný na úrovni kontroliek. Toto je najlepšie ukázať na príklade, takže sa pozrite na kód na snímke obrazovky nižšie, aby ste zistili, ako môžete ovplyvniť vykresľovanie textu s týmito vlastnosťami.
TextFormattingMode
Pomocou vlastnosti TextFormattingMode sa môžete rozhodnúť, ktorý algoritmus sa má použiť pri formátovaní textu. Môžete si vybrať medzi Ideal (predvolená hodnota) a Display . Zvyčajne by ste mali ponechať túto vlastnosť nedotknutú, pretože nastavenie Ideal bude najlepšie pre väčšinu situácií, ale v prípadoch, keď je potrebné vykresliť veľmi malý text, nastavenie Display môže niekedy priniesť lepší výsledok. Tu je príklad, kde môžete vidieť rozdiel (aj keď veľmi jemný):
<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>
TextRenderingMode
Vlastnosť TextRenderingMode poskytuje kontrolu nad tým, ktorý antialiasing (vyhladenie) sa používa pri vykresľovaní textu. Najväčší účinok má v kombinácii s nastavením Display pre vlastnosť TextFormattingMode , ktorú použijeme v tomto príklade na ilustráciu rozdielov:
<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>
Ako môžete vidieť, výsledný text sa v určitej miere líši a mali by ste to meniť len za špeciálnych okolností.