This article has been localized into Slovak by the community.
TextBlock - riadkové formátovanie
V minulom článku sme sa pozreli na základné funkcie ovládacieho prvku TextBlock: Zobrazenie jednoduchého reťazca a jeho zalomenie v prípade potreby. Dokonca sme použili inú farbu než predvolenú na vykresľovanie textu, ale čo keď chcete urobiť viac ako len definovať statickú farbu pre celý text v TextBlocku?
Našťastie ovládací prvok TextBlock podporuje inline content (vnorený obsah). Tieto malé konštrukcie všetky dedia z triedy Inline, čo znamená, že môžu byť vykreslené ako súčasť väčšieho textu. Pokiaľ ide o písanie, podporované prvky zahŕňajú AnchoredBlock, Bold, Hyperlink, InlineUIContainer, Italic, LineBreak, Run, Span a Underline. V nasledujúcich príkladoch sa budeme venovať väčšine z nich.
Tučné, kurzíva a podčiarknuté
Ide pravdepodobne o najjednoduchšie typy inline elementov. Názvy by vám mali veľa povedať o tom, čoho sa týkajú, ale poskytneme vám stručný príklad, ako ich používať:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockInlineSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockInlineSample" Height="100" Width="300">
<Grid>
<TextBlock Margin="10" TextWrapping="Wrap">
TextBlock with <Bold>bold</Bold>, <Italic>italic</Italic> and <Underline>underlined</Underline> text.
</TextBlock>
</Grid>
</Window>
Podobne ako v prípade HTML, obklopíte svoj text značkou Bold, aby ste získali tučný text atď. Vďaka tomu je veľmi jednoduché vytvárať a zobrazovať rôznorodé texty vo vašich aplikáciách.
Všetky tri značky sú len podriadené triedy prvku Span, z ktorých každý nastavuje určitú vlastnosť na prvku Span a vytvorí požadovaný efekt. Napríklad značka Bold nastaví vlastnosť FontWeight (hrúbku písma) na podčiarknutý prvok Span, značka Italic nastaví FontStyle (štýl písma) atď.
LineBreak (zalomenie riadku)
Jednoducho vloží do textu zalomenie riadku. Pozrite si predchádzajúcu kapitolu, kde nájdete príklad, v ktorom používame prvok LineBreak.
Hyperlink (hypertextový odkaz)
Prvok Hyperlink vám umožňuje mať odkazy na web stránky vo vašom texte. Vykresľuje sa štýlom, ktorý vyhovuje aktuálnemu motívu Windows, ktorý bude zvyčajne podčiarknutý modrý text s červeným efektom pri prejdení kurzorm myši, ktorý sa zmení na ruku. Môžete použiť vlastnosť NavigateUri na definovanie adresy URL, ku ktorej chcete prejsť. Tu je príklad:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockHyperlinkSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockHyperlinkSample" Height="100" Width="300">
<Grid>
<TextBlock Margin="10" TextWrapping="Wrap">
This text has a <Hyperlink RequestNavigate="Hyperlink_RequestNavigate" NavigateUri="https://www.google.com">link</Hyperlink> in it.
</TextBlock>
</Grid>
</Window>
Hypertextový odkaz sa používa aj vo vnútri stránok WPF, kde sa dá použiť na navigáciu medzi stránkami. V takomto prípade nebudete musieť konkrétne spracovať udalosť RequestNavigate, ako to robíme v príklade, ale na spustenie externých adries URL z aplikácie WPF, potrebujeme pomoc z tejto udalosti a triedy Process. Prihlásime sa k udalosti RequestNavigate, ktorá nám umožňuje spustiť prepojenú adresu URL v predvolenom prehliadači používateľa s jednoduchým obslužným programom udalostí, ako je ten v kóde:
private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)
{
System.Diagnostics.Process.Start(e.Uri.AbsoluteUri);
}
Run
Prvok Run umožňuje použiť štýl na reťazec pomocou všetkých dostupných vlastností prvku Span, ale zatiaľ čo prvok Span môže obsahovať ďalšie vložené elementy, prvok Run môže obsahovať iba obyčajný text. Tým je prvok Span flexibilnejší a preto logická voľba vo väčšine prípadov.
Span
Prvok Span nemá predvolené vykresľovanie, ale umožňuje nastaviť takmer akýkoľvek druh konkrétneho vykresľovania vrátane veľkosti písma, štýlu a hrúbky, farieb pozadia a popredia atď. Skvelá vec týkajúca sa elementu Span spočíva v tom, že dovoľuje ďalšie inline prvky vnútri, čo uľahčuje dokonca aj pokročilé kombinácie textu a štýlu. V nasledujúcom príklade som použil veľa prvkov Span, aby som vám ukázal niektoré z mnohých možností pri použití inline elementov Span:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSpanSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockSpanSample" Height="100" Width="300">
<Grid>
<TextBlock Margin="10" TextWrapping="Wrap">
This <Span FontWeight="Bold">is</Span> a
<Span Background="Silver" Foreground="Maroon">TextBlock</Span>
with <Span TextDecorations="Underline">several</Span>
<Span FontStyle="Italic">Span</Span> elements,
<Span Foreground="Blue">
using a <Bold>variety</Bold> of <Italic>styles</Italic>
</Span>.
</TextBlock>
</Grid>
</Window>
Takže, ako vidíte, ak žiadny z ostatných prvkov sa vo vašej situácii nedá použiť, alebo ak chcete pri formátovaní textu len prázdne plátno, je prvok Span skvelou voľbou.
Formátovanie textu z kódu C#
Ako môžete vidieť, formátovanie textu v XAML je veľmi jednoduché, ale v niektorých prípadoch by ste mohli uprednostňovať, alebo dokonca to museli urobiť, z vášho kódu C#. Je to trochu ťažšie, ale tu je príklad toho, ako to urobiť:
<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockCodeBehindSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextBlockCodeBehindSample" Height="100" Width="300">
<Grid></Grid>
</Window>
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Media;
namespace WpfTutorialSamples.Basic_controls
{
public partial class TextBlockCodeBehindSample : Window
{
public TextBlockCodeBehindSample()
{
InitializeComponent();
TextBlock tb = new TextBlock();
tb.TextWrapping = TextWrapping.Wrap;
tb.Margin = new Thickness(10);
tb.Inlines.Add("An example on ");
tb.Inlines.Add(new Run("the TextBlock control ") { FontWeight = FontWeights.Bold });
tb.Inlines.Add("using ");
tb.Inlines.Add(new Run("inline ") { FontStyle = FontStyles.Italic });
tb.Inlines.Add(new Run("text formatting ") { Foreground = Brushes.Blue });
tb.Inlines.Add("from ");
tb.Inlines.Add(new Run("Code-Behind") { TextDecorations = TextDecorations.Underline });
tb.Inlines.Add(".");
this.Content = tb;
}
}
}
Je skvelé mať takú možnosť a v niektorých prípadoch to môže byť potrebné, ale tento príklad vám pravdepodobne ocení XAML ešte viac.