TOC

This article has been localized into Russian by the community.

Основные элементы управления:

Элемент TextBlock

TextBlock нельзя назвать элементом управления (control), сам по себе он не наследует класс Control, но используется как и большинство других "контролек" в рамках WPF, так что, ради упрощения процесса, отнесем текстовое поле к элементам управления.

Элемент TextBlock является одним из самых фундаментальных в WPF, поскольку он очень полезен в использовании. Он позволяет разместить текст на экране, как Label, но при этом прост в использовании и не требователен к ресурсам. В общем восприятии, Label это короткий однострочный текст (но может включать в себя, например, изображение), в то время как TextBlock отлично справляется еще и с многострочным текстом, но содержать в себе может исключительно текст (string). Label и TextBlock могут предложить свои уникальные достоинства, но что Вам выбрать - будет очень зависеть от ситуации.

Мы уже использовали TextBlock в главе "Hello, 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>

Это так же просто, как и написано, и, если Вы читали предыдущие разделы данного руководства, то в принципе, не найдете здесь чего-то нового. Текст между открывающим и закрывающим тегами - это упрощенный вариант определения свойства Text текстового поля.

Для следующего примера давайте выведем более длинный текст и посмотрим как TextBlock с ним справится. Также я добавлю отступы, для более элегантного вида:

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

Работа с большими строками

Скоро скриншот с примером Вас убедит в том, что 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="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, каждый разного цвета (свойство Foreground), для наглядности. В каждом решение проблемы большого текста решается по своему:

Красный TextBlock использует тег LineBreak для ручного возврата каретки. Это дает Вам абсолютный контроль над тем, где Вы хотите прервать строку и начать ее с новой, но такое решение недостаточно гибкое для большинства ситуаций. Если пользователь увеличивает окно, текст остается прерванным в том же месте, хотя места для текста размещенного в одну строку уже будет более чем достаточно.

Зеленый TextBlock использует свойство TextTrimming со значением CharacterEllipsis, для того, чтобы в конце строки TextBlock добавить многоточие, когда текст уже не будет вмещаться по ширине. Это распространенный метод сигнализирования о том, что текста имеется больше, чем позволяет вместить контейнер. Это может пригодиться в ситуации, когда у Вас есть слишком длинный текст, но Вы не сильно уж и хотите готовить для него дополнительную строку. Альтернативой значению CharacterEllipsis является WordEllipsis, которое при недостатке пространства для текста по ширине, обрежет его до целого слова, вместо того, чтобы вставить многоточие в середине слова.

И третий вариант - синий TextBlock использует свойство TextWrapping со значением Wrap для того, чтобы переносить текст на новую строку всегда, когда текст уже не помещается. В отличие от первого текстового поля, в котором мы вручную управляли переносом строки, здесь, процесс является полностью автоматическим и имеет еще одно достоинство: в случае, когда меняется размер текстового поля, переносы строк обновляются сами. Делая окно больше или меньше Вы можете заметить как ширина строк и переносы приспосабливаются к новым условиям.

Здесь был описан процесс работы с простыми строками в 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!