TOC

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

Основни контрол-и:

TextBlock контрола - вградено форматиране

В последната статия разгледахме основната функционалност на контролата 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 таг, за да получите удебелен текст и т.н. Това прави много лесно създаването и показването на разнообразен текст във вашите приложения.

All three of these tags are just child classes of the Span element, each setting a specific property on the Span element to create the desired effect. For instance, the Bold tag just sets the FontWeight property on the underlying Span element, the Italic element sets the FontStyle and so on.

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 адреси от обикновено WPF приложение се нуждаем от малко помощ от това събитие и класа Process. Ние се абонираме за събитието RequestNavigate, което ни позволява да стартираме свързания URL адрес в браузъра по подразбиране на потребителите с проста функция (event handler) като следната в файла с код:

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