TOC

This article has been localized into Vietnamese by the community.

Các control cơ bản:

TextBlock control - Định dạng nội tuyến

Trong bài viết trước chúng ta đã xem xét chức năng chính của TextBlock control: hiển thị 1 chuỗi đơn giản và xuống dòng nếu cần. Chúng ta thậm chí đã sử dụng màu khác với mặc định để hiển thị đoạn văn, nhưng nếu bạn muốn làm nhiều hơn là việc chỉ định nghĩa màu tĩnh cho tất cả đoạn văn trong TextBlock thì thế nào?

May mắn là TextBlock control hỗ trợ Inline(trực tiếp) element. Những phần tử này đều được thừa kế từ lớp Inline, có nghĩa là chúng có thể được hiển thị trong hàng, như một phần của 1 đoạn văn lớn. Giống như lối viết, những phần tử được hỗ trợ bao gồm AnchoredBlock, Bold, Hyperlink, InlineUIContainer, Italic, LineBreak, Run, Span, và Underline. Trong ví dụ sau, chúng ta sẽ có cái nhìn về hầu hết chúng.

Bold, Italic và Underline

Đây có thể là những kiểu đơn giản nhất của các phần tử inline. Những cái tên có thể đã cho bạn biết về công dụng của chúng, nhưng chúng tôi vẫn cho bạn 1 ví dụ nhanh về cách sử dụng chúng:

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

Khá giống với HTML, bạn chỉ việc bao bọc đoạn văn của bạn với 1 thẻ Bold để in đậm và tương tự với những phần tử còn lại. Việc này làm cho chuyện tạo và hiển thị những đoạn văn đa dạng trên ứng dụng của bạn rất dễ dàng.

Cả ba thẻ trên đều là lớp con của phần tử Span,mỗi cái thiết lập một thuộc tính nhất định của phần tử Span để tạo được hiệu ứng mong muốn. Chẳng hạn, thẻ Bold thiết lập thuộc tính FontWeight trên phần tử Span nằm dưới , phần tử Italic thiết lập FontStyle v.v...

LineBreak

Đơn giản chèn 1 line break vào trong text. Vui lòng xem chương trước để thấy ví dụ về cách chúng tôi sử dụng phần tử LineBreak.

Hyperlink

Phần tử Hyperlink cho phép bạn có những liên kết trong text của bạn. Nó được hiển thị với 1 kiểu cách phù hợp với theme mặc định của Windows, nó thông thường là loại chữ màu xanh và gạch dưới với 1 hiệu ứng màu chữ đỏ khi rê chuột qua. Bạn có thể sử dụng thuộc tính NavigateUri để xác định URL mà bạn muốn nó trỏ tới. Đây là một ví dụ:

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

Siêu liên kết cũng được sử dụng bên trong trang WPF, nơi nó có thể được sử dụng để điều hướng giữa các trang. Trong trường hợp đó, bạn sẽ không phải xử lý cụ thể sự kiện RequestNavigate, như chúng ta làm trong ví dụ, nhưng để khởi chạy URL bên ngoài từ một ứng dụng WPF thông thường, chúng ta cần một chút trợ giúp từ sự kiện này và lớp Process. Đăng ký sự kiện RequestNavigate cho phép chúng ta khởi chạy URL được liên kết trong trình duyệt mặc định của người dùng với trình xử lý sự kiện đơn giản như trình xử lý sự kiện này trong code behind sau tệp:

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

Run

Phần tử Run cho phép bạn tạo kiểu cho chuỗi bằng cách sử dụng tất cả các thuộc tính có sẵn của phần tử Span, nhưng trong khi phần tử Span có thể chứa các phần tử trong hàng khác, phần tử Run chỉ có thể chứa văn bản thuần . Điều này làm cho phần tử Span linh hoạt hơn do đó là lựa chọn hợp lý trong hầu hết các trường hợp.

Span

Phần tử Span không có bất cứ hiển thị cụ thể theo mặc định, nhưng cho phép bạn thiết lập hầu hết mọi loại hiển thị cụ thể, bao gồm cả cỡ chữ(font size), style và weight, background and foreground colors(màu nền và cận cảnh) , v.v... Điểm tốt của phần tử Span là nó cho phép các phần tử inline khác bên trong nó, làm cho nó dễ dàng thực hiện ngay cả các kết hợp khó giữa văn bản và style. Trong ví dụ sau, tôi có sử dụng một số phần tử Span để cho bạn thấy một trong vô vàn khả năng khi sử dụng các phần tử inline 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>

Như bạn có thể thấy, nếu không phần tử nào khác có thể dùng được trong trường hợp của bạn hoặc nếu bạn chỉ muốn 1 blank canvas khi bắt đầu định dạng đoạn văn của bạn, phần tử Span là 1 sự lựa chọn tốt .

Định dạng text từ C#/Code-Behind

Như bạn có thể thấy, định dạng text thông qua XAML là rất đơn giản, nhưng trong một vài trường hợp, bạn sẽ muốn hoặc thậm chí cần định dạng từ C#/Code-Behind file của bạn. Điều này có chút ít dài dòng, nhưng đây là 1 ví dụ về cách bạn làm việc với nó:

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

Thật là tuyệt khi có khả năng này, và nó có thể cần thiết trong vài trường hợp, nhưng ví dụ này chắc chắn sẽ khiến bạn đánh giá cao hơn về 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!