TOC

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

Основни контрол-и:

TextBlock контрол-а

TextBlock не е контрола сама по себе си, тъй като не наследява от класа Control, но се използва подобно на всяка друга контрола в WPF, така че за да опростим нещата, ще го наречем контрола.

Текстблока (TextBlock) е една от най- основните контроли в WPF, а също и една от най-полезните. Той ни позволява да въведем текст на екрана, също както прави контролата Етикет (Label), но по един начин, който е по- опростен и изисква по- малко ресурси. Общоприето е, че Етикета(Label) се използва за кратки текстове, например за едноредов текст (като също може да съдържа и изображение), докато Текстблока (TextBlock) пък работи много добре и за многоредов текст, като особеното тук е, че може да съдържа само и единствено текст т.e (strings). Както Етикета (Label), то така и Текстблока (TextBlock) ни предлагат своите предимства които са уникални сами по себе си, а това кое от двете трябва да използваме, зависи най- вече от ситуацията.

Ние вече използвахме един Текстблок контрол в "Здравей, WPF!" , но сега нека да обърнем внимание на Текстблока в най- опростения му вариант:

<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>

Толкова е просто, колкото изглежда и ако вече сте прочели предишните части на това ръководство, то не би трябвало да имате нещо непозато тук. Текстът между Текстблокът (TextBlock) е просто един пряк път за настройване на текста (Text property) на Текстблока (TextBlock).

За следващия пример, нека опитаме с по- дълъг текст, за да покажем как TextBlock се оправя с това. Добавен е и малко Margin, за да изглежда малко по-добре:

<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>

Работа с дълги текстове

Както скоро ще разберете от скрийншота или така наречената екранна снимка, Текстблока е напълно способен да борави с дълги, многоредови текстове, но все пак няма да направи нищо по подразбиране. В горния случай текста е твърде дълъг, за да бъде визуализиран в прозореца, затова визуализира толкова текст колкото е възможно, а след това просто спира.

За щастие, има няколко начина, по които можем да се справим с това. Ще ви покажа всички тях, а след това и ще ви ги обясня по отделно.

<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>

Имаме три Текстблок контроли (TextBlock controls), всяка от които е с различен цвят (използвайки свойството Foreground) за повече пригледност. Във всеки отделен случай факта, че текстово съдържание е твърде дълго се обработва по различен начин.

Червеният TextBlock използва етикет LineBreak за ръчно прекъсване на реда на определено място. Това ви дава абсолютен контрол върху това къде искате текстът да прекъсне на нов ред, но не е много гъвкаво решение за повечето ситуации. Ако потребителят направи прозореца по-голям, текстът ще продължи да се пренася на същата позиция, въпреки че вече може да има достатъчно място, за да побере целия текст на един ред.

Зеленият TextBlock използва пък свойството TextTrimming със стойност CharacterEllipsis, за да накара TextBlock-а да показва многоточие (...), когато не може да побере повече текст в контролата. Това е често срещан начин да се покаже, че има повече текст, но няма достатъчно място за показването му. Това е добър вариант, за случаите когато имате текст, който може да е твърде дълъг, но абсолютно държите да не използвате повече от един ред. Като алтернатива на CharacterEllipsis можете да сложите WordEllipsis, който ще изреже текста в края на последната възможна дума вместо последния възможен знак, предотвратявайки думата да бъде показана само частично.

Синият TextBlock използва свойството TextWrapping със стойността Wrap, за да може TextBlock да преминава на следващия ред всеки път, когато не може да побере повече текст на предишния. Противно на първия TextBlock, където ние ръчно определяме къде да пренесем реда на текста, това се случва напълно автоматично и освен всичко се коригира автоматично веднага щом TextBlock получи повече или по-малко свободно място. Опитайте да направите прозореца в примера по-голям или по-малък и ще видите как пренасянето на думите се актуализира, за да съответства на пространството.

Всичко това е свързано с прости низове от текст(strings) в Текстблок (TextBlock). В следващата глава ще разгледаме някои от по- напредналите и осъвършенствани функционалности, които ни позволяват да създаваме текстове в различни стилове в рамките на един Текстблок (TextBlock) и други неща.


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!