TOC

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

Basic controls:

The TextBlock control - Inline formatting

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

На щастя, керування TextBlock підтримує вбудований вміст. Ці невеликі контрольовані конструкції все наслідуються від класу Inline, що означає, що вони можуть бути виведеними, як частина більшого тексту. Під час написання підтримувані елементи включають AnchoredBlock, Bold, Hyperlink, InlineUIContainer, Italic, LineBreak, Run, Span і Underline. У наступних прикладах ми розглянемо більшість з них.

Bold, Italic and 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, ви просто оточуєте свій текст жирним тегом, щоб отримати жирний текст і так далі. Це дозволяє легко створювати та відображати різноманітний текст у своїх програмах.

Всі три теги - це лише дочірні класи елемента Span, кожна з яких задає певне властивість елемента Span, щоб створити бажаний ефект. Наприклад, тег "Жирний шрифт" просто встановлює властивість FontWeight на базовому елементі Span, елемент курсиву встановлює шрифт FontStyle і так далі.

LineBreak

Просто вставляє розрив рядка в текст. Будь ласка, дивіться попередній розділ для прикладу, де ми використовуємо елемент LineBreak.

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-адрес з регулярного 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, щоб показати вам деякі з багатьох можливостей при використанні елементів вбудованого інтервалу:

<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 є прекрасним вибором.

Formatting text from C#/Code-Behind

Як ви можете бачити, форматування тексту через XAML дуже просте, але в деяких випадках ви можете віддати перевагу або навіть зробити це з вашого C # / Code-Behind файлу. Це трохи більш обтяжливо, але ось приклад того, як ви можете це зробити:

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