TOC

This article has been localized into Russian by the community.

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

Элемент TextBlock - встроенное форматирование

В предыдущей главе мы рассмотрели фундаментальную механику элемента TextBlock: отображение простых строк и их перенос при необходимости. Мы даже использовали разные цвета при рендере текста, но что, если Вы захотите во время стилизации текста, менять не только его цвет?

К счастью, элемент TextBlock поддерживает встроенное содержание. Все эти небольшие нотации похожие на определение элементов управления наследуют класс Inline, что значит, что они могут отображаться как часть текста, встроенного в больший текста. Согласно написанному, эти нотации включают в себя следующие стили текста: AnchoredBlock, Bold, Hyperlink, InlineUIContainer, Italic, LineBreak, Run, Span, и Underline. В следующем примере мы рассмотрим некоторые из них.

Bold, Italic и Underline

Это, вероятно одни из самых простых типов встроенных элементов. Их названия сами говорят за себя, но мы все-таки посвятим им немного времени, чтобы понять, как они функционируют:

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

Это было очень похоже на HTML - Вы просто оборачиваете необходимый контент в тег Bold и получаете жирный текст. Это упрощает процесс создания и отображения специально отформатированного текста в приложении.

Все три рассмотреныне тега - являются дочерними классами элемента Span, каждый из которых накладывает специальное свойство на элемент Span для получения желаемого эффекта. Например, тег Bold просто устанавливает свойство FontWeight базового элемента Span, а Italic устанавливает FontStyle.

LineBreak

Просто вставляет разрыв строки в тексте. Обратите, пожалуйста, внимание на пример из предыдущей главы, в котором мы использовали элемент LineBreak.

Hyperlink

Элемент Hyperlink позволяет вам вставлять ссылки в текст. Они отображаются согласно текущей теме Windows, которая обычно соответствует подчеркнутому синему тексту, красному при наведении мыши и с курсором в форме руки. Вы можете использовать свойство NavigateUri для определения целевого URL. Вот пример:

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

Гиперссылки часто используются в WPF, когда необходимо осуществлять навигацию между разными страницами. В таком случае, нет необходимости специально обрабатывать событие RequestNavigate, как мы делали в примере, но для соединения со внешними URL c обыкновенного приложения WPF, нам необходимо использовать это событие и класс Process. Мы подписываемся на событие RequestNavigate, которое позволяет запускать контент по URL в браузерах пользователей, но с помощью простого обработчика событий, пример которого представлен ниже:

private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)
{
	System.Diagnostics.Process.Start(e.Uri.AbsoluteUri);
}

Run

Элемент Run позволяет Вам сформатировать сроку, используя доступные свойства элемента Span, но, в то время как Span поддерживает другие встроенные элементы, Run - может содержать лишь простой текст. Это делает Span более гибким элементом, и, как следствие - логичным выбором при решении большинства задач.

Span

Элемент Span не имеет специального отображения по умолчанию, но позволяет Вам установить практически любой стиль отображения, включая: размер шрифта, стиль, начертание, цвет фона, цвет текста и другие. Восхитительным в Span является еще то, что он поддерживает другие встроенные элементы внутри себя, упрощая тем самым процесс продвинутого стилизированния текста. В следующем примере, я использовал много элементов Span, для того, чтобы показать Вам множество возможностей, которые дает 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>

Таким образом, если ни один из элементов Вам не подходит, и вы просто хотите иметь "пустой контейнер" при форматировании текста - Span будет идеальным вариантом.

Форматирование текста из C#/CodeBehind

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

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

Здорово иметь возможность, а в некоторых случаях необходимо использовать этот механизм. Вероятно данный пример заставил Вас еще больше ценить XAML.

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!