TOC

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

Controale de baza:

The TextBlock control - Inline formatting

În articolul anterior ne-am uitat la funcționalitatea de bază a controlului TextBlock: Afișarea unui simplu string și împachetându-l atunci când este necesar. Am folosit chiar și altă culoare decât cea standard, dar dacă ai fi vrut sa faci mai mult decât sa definești o culoare fixă, static, pentru tot textul din interiorul TextBlock?

Din fericire controlul TextBlock suportă conținut inline. Aceste mici construcții de tip control sunt moștenite din clasa Inline, asta înseamnă că ele pot fi afișate inline, ca parte a unui text mai mare. Ca și scris, elementele incluse sunt AnchoredBlock, Bold, Hyperlink, InlineUIContainer, Italic, LineBreak, Run, Span, and Underline. În următoarele exemple, ne vom uita la marea majoritate.

Bold, Italic și Underline

Acestea sunt probabil cele mai simple elemente de tip inline. Numele lor ar trebui sa vă sugereze ce fac, dar noi totuși vă vom oferi un exemplu rapid despre cum le puteți folosi:

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

Asemnea scrierii HTML, vă înconjurați textul cu un tag Bold pentru a avea un text îngroșat și tot așa. Aceasta face ca crearea și afișarea diverselor texte sa fie foarte ușor în aplicațiile dumneavoastră.

Toate aceste tag-uri sunt doar clase copil (child) a elementului Span, fiecare setare este o proprietate specifică pe elementul Span pentru a crea efectul dorit. De exemplu, tag-ul Bold va seta proprietatea FontWeight pe elementul Span de dedesupt, elementul Italic setează FontStyle și tot așa.

LineBreak

Pur și simplu întrerupe textul, line break, și trimite pe rândul următor restul textului. Te rog vezi capitolul anterior, pentru un exemplu, unde folosim elementul LineBreak.

Hyperlink

Elementul Hyperlink îți permite să aveți link-uri în textul dvs. Este afișat cu stil (style) care se potrivește temei curente a Windows-ului, ce de obicei este un fel de text albastru subliniat, iar atunci când treceți cu mouse-ul pe deasupra lui se înrosește și cursorul se transformă în mânuță. Poți folosi proprietatea NavigateUri pentru a defini URL-ul la care vreți să navigați. Uitați un exemplu:

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

Hyperlink-ul este folosit de asemenea înăuntrul Paginii WPF, unde este folosit pentru a naviga printre pagini. În acest caz, nu trebuie să utilizați evenimentul RequestNavigate, așa cum facem în exemplu, dar pentru a lansa URL-uri externe din orice aplicație WPF, avem nevoie de puțin ajutor de la acest eveniment și din partea clasei Process. Vă înscrieți la evenimentul RequestNavigate, el vă va permite să lansam URL-ul legat în browser-il default al utilizatorului cu un simplu manipulator de evenimente, în codul din spatele fișierului, precum acesta:

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

Run

Elementul Run vă permite să aplicați stiluri (style) unui string folosind toate proprietățile disponibile unui element Span, dar în timp ce un element Span poate conține alte elemente inline, un elemnt Run conține doar un simplu text. Asta face ca elementul Span să fie mai flexibil și deci o alegere logică în marea majoritate a cazurilor.

Span

Elementul Span nu are metode de afișare specifice în mod implicit, dar iți permite să setați aproape orice fel de afișaj specific ce include mărimea font-ului, stil sau îngroșare, fundal sau culori ale textului (foreground) și așa mai departe. Lucrul extraordinar al elementului Span este că permite alte elemente inline înăuntrul său, făcând posibilă ușurința combinațiilor avansate de text și stil. În exemplul următor, am folosit multe elemente Span pentru a-ți demonstra câteva din multiplele posibilități atunci cand folosiți elemente inline de tip 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>

Așa cum puteți vedea, dacă nici unul din celelalte elemente nu vă este de folos în situația dvs. sau dacă vreți să porniți cu o pânză albă atunci când formatați textul, elementul Span este cea mai buna alegere.

Formatarea textului din spatele codului în C#

Așa cum puteți vedea, formatarea textului în XAML este foarte ușoară, dar în anumite cazuri, puteți prefera sau este necesar să o faceți în fișierul C#/Code-Behind. Aceasta este mai greoaie, dar uitați cum ați pute să o faceți:

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

Este extraordinar faptul că poți avea posibilitatea, există necesitatea modului acesta în unele cazuri, dar aces exemplu probabil vă va face să apreciați XAML-ul mai mult.

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!