TOC

This article is currently in the process of being translated into Czech (~95% done).

Basic controls:

Ovládací prvek TextBlock control

TextBlock není ovládací prvek sám o sobě, protože nedědí z třídy Control, ale používá se podobně jako jakýkoliv jiný ovládací prvek v rozhraní WPF, takže mu budeme říkat ovládací prvek, aby byly věci jednoduché.

Ovládací prvek TextBlock je jedním z nejzásadnějších a velmi užitečných ovládacích prvků ve WPF. Umožňuje umístit text na obrazovku podobně jako ovládací prvek Label, ale je jednodušší a na zdroje méně náročný. Label je primárně určen pro krátké jednořádkové texty (ale může zobrazit například i obrázek), zatímco TextBlock funguje velmi dobře pro víceřádkové řetězce, ale může obsahovat pouze text (řetězce - strings). Jak Label, tak TextBlock nabízejí své jedinečné výhody, a jejich použití tak volte podle konkrétní situace.

V článku "Hello, WPF!" jsme již ovládací prvek TextBlock použili, ale prozatím se podívejme na TextBlock v jeho nejjednodušší podobě:

<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="TextBlockSample" Height="100" Width="200">
    <Grid>
		<TextBlock>This is a TextBlock</TextBlock>
    </Grid>
</Window>

Je to tak jednoduché, jak jen může být a pokud jste četli předchozí kapitoly tohoto výukového programu, pak to není nic nového. Text mezi tagy TextBlock jednoduše nastavuje vlastnost Text objektu TextBlock.

V dalším příkladu zkusíme zapsat delší text, který ukáže, jak se s tím TextBlock vypořádá. Trochu jsem zvětšil také okraje (Margin), aby to trochu lépe vypadalo:

<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="TextBlockSample" Height="100" Width="200">
    <Grid>
		<TextBlock Margin="10">This is a TextBlock control and it comes with a very long text</TextBlock>
    </Grid>
</Window>

Zacházení s dlouhými řetězci

Jak brzy zjistíte z obrazovky, TextBlock je sice dokonale schopen nakládat s dlouhými víceřádkovým textem, ale ve výchozím nastavení nebude dělat nic. V tomto případě je text příliš dlouhý na zobrazení uvnitř okna, takže WPF zobrazí co nejvíce textu v rámci okna a pak se zastaví a řádek dále nezobrazuje.

Naštěstí existuje několik způsobů, jak s tím jednat. V dalším příkladu vám všechny ukážu a pak vám je později vysvětlím:

<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="TextBlockSample" Height="200" Width="250">
    <StackPanel>
		<TextBlock Margin="10" Foreground="Red">
			This is a TextBlock control<LineBreak />
			with multiple lines of text.
		</TextBlock>
		<TextBlock Margin="10" TextTrimming="CharacterEllipsis" Foreground="Green">
			This is a TextBlock control with text that may not be rendered completely, which will be indicated with an ellipsis.
		</TextBlock>
		<TextBlock Margin="10" TextWrapping="Wrap" Foreground="Blue">
			This is a TextBlock control with automatically wrapped text, using the TextWrapping property.
		</TextBlock>
	</StackPanel>
</Window>

Takže pro názornost máme tři ovládací prvky TextBlock, každý s jinou barvou (pomocí vlastnosti popředí - Foreground property). Všechny zpracovávají jejich příliš dlouhý textový obsah různými způsoby:

Červený TextBlock používá značku konce řádku ( LineBreak ) na určeném místě jejím ručním vložením. To vám dává absolutní kontrolu nad tím, kde se má text rozdělit na nový řádek, ale není příliš flexibilní pro většinu situací. Pokud uživatel zvětší okno, text se bude stále zalamovat na stejném místě, i když nyní může být dostatečně velký prostor, aby se celý text vešel na jeden řádek.

Zelený TextBlock používá vlastnost TextTrimmin s hodnotou CharacterEllipsis, aby se v TextBlock zobrazily tři tečky (...), pokud se do ovládacího prvku další text nevejde. Jedná se o běžný způsob, jak znázornit, že existuje více textu, ale není dostatek místa pro jeho zobrazení. To je vhodné pro případy, kdy máte příliš dlouhý text, ale nechcete, aby používal více než jeden řádek. Jako alternativu ke CharacterEllipsis můžete použít WordEllipsis, který ořízne text na konci posledního možného slova namísto posledního možného znaku, což zabrání tomu, aby se slovo zobrazilo pouze zčásti.

Modrý TextBlock používá vlastnost TextWrapping s hodnotou obtékání - Wrap , aby se text zalomil vždy na další řádek, když se již nevejde do předchozího řádku. Na rozdíl od prvního objektu TextBlock, kde jsme ručně definovali místo zalomení textu, se to děje zcela automatické a navíc: je také automaticky upraven podle místa které má TextBlock k dispozici. Pokuste se v příkladu zvětšit nebo zmenšit okno a uvidíte, jak bude obsah podle rozměru okna aktualizován.

Doposud to všechno bylo o tom, jak se vypořádat v TextBlock s jednoduchými řetězci. V následující kapitole se podíváme na některé pokročilejší funkce objektu TextBlock, což nám umožní vytvořit texty různých stylů uvnitř tohoto objektu, a ještě mnohem více.

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!