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!