TOC

This article has been localized into Ukrainian by the community.

Основні елементи керування:

Елемент керування TextBlock - вбудоване форматування

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

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

Гіперпосилання

Елемент гіперпосилання дозволяє мати посилання в тексті. Він відображається стилем, який відповідає вашій темі 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 є прекрасним вибором.

Форматування тексту з 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!