TOC

This article has been localized into Vietnamese by the community.

Các control cơ bản:

Label

Label ở dạng đơn thuần nhất sẽ rất giống với TextBlock mà chúng ta đã dùng ở bài viết khác. Bạn sẽ nhận thấy được ngay là thay vì dùng thuộc tính Text, Label có thuộc tính Content. Lý do là vì Label có thể dùng để chứa bất kỳ control nào khác bên trong, thay vì chỉ chứa văn bản thông thường. Phần nội dung truyền vào cũng có thể là chuỗi ký tự như bạn thấy trong ví dụ cơ bản dưới đây:

<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="LabelControlSample" Height="100" Width="200">
    <Grid>
		<Label Content="This is a Label control." />
	</Grid>
</Window>

Một vấn đề khác bạn có thể chú ý thấy là Label theo mặc định sẽ có một chút khoảng cách đệm, cho phép văn bản được hiển thị cách góc trên trái một chút. Trong khi ở TextBlock thì bạn phải thiết lập cụ thể.

Trong trường hợp đơn giản trên khi nội dung chỉ là chuỗi ký tự, Label sẽ tạo một TextBlock bên trong để chứa và hiển thị chuỗi ký tự lên.

So sánh khác biệt giữa Label và TextBlock

Vậy dùng Label có gì đặc biệt? Thực ra là có một vài điểm khác biệt quan trọng giữa Label và TextBlock. TextBlock chỉ cho phép bạn hiển thị chuỗi văn bản, trong khi Label có thể:

  • Chỉ định một viền
  • Hiển thị một điều khiển khác, ví dụ: hiển thị một ảnh trong Label
  • Sử dụng một mẫu nội dung thông qua thuộc tính ContentTemplate
  • Sử dụng khóa truy cập để focus đến điều khiển liên quan

Điểm chú ý cuối cùng ở trên thực chất là lý do chính để dùng Label thay vì TextBlock. Bất cứ khi nào bạn chỉ muốn hiển thị văn bản đơn giản, bạn nên dùng điều khiển TextBlock, vì nó nhẹ và nhanh hơn Label trong hầu hết các trường hợp.

Label và khóa truy cập (thuật nhớ)

Trên hệ điều hành Windows và các hệ điều hành khác, một phương án thực tế phổ biến là bạn có thể truy cập vào các điều khiển trong một hộp thoại bằng cách giữ phím [Alt] và nhấn một phím ký tự được gắn với điều khiển mà bạn muốn truy cập. Ký tự đó sẽ được sáng lên khi bạn bấm giữ phím [Alt]. TextBlock không hỗ trợ chức năng này, nhưng Label thì có, thế nên để điều khiển các nhãn, Label thường là lựa chọn tuyệt vời. Hãy cùng xem một ví dụ mô phỏng chức năng trên ở dưới:

<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="LabelControlSample" Height="180" Width="250">
	<StackPanel Margin="10">
		<Label Content="_Name:" Target="{Binding ElementName=txtName}" />
		<TextBox Name="txtName" />
		<Label Content="_Mail:" Target="{Binding ElementName=txtMail}" />
		<TextBox Name="txtMail" />
	</StackPanel>
</Window>

Ảnh trên cho thấy hội thoại hiển thị khi phím Alt được ấn. Thử chạy và giữ phím [Alt] và sau đó nhấn phím N và M. Bạn sẽ thấy trỏ chuột dịch chuyển focus giữa hai TextBox.

Ở đây chúng ta có một vài khái niệm mới. Thứ nhất, chúng ta định nghĩa khóa truy cập bằng cách thêm vào gạch dưới (_) trước ký tự đầu thuộc tính Content. Không hẳn là bắt buộc ký tự đầu, có thể là trước bất kỳ một ký tự nào trong thuộc tính Content. Thực tiễn là nên sử dụng ký tự đầu nếu ký tự đó chưa được dùng làm khóa truy cập của các điều khiển khác.

Chúng ta sử dụng thuộc tính Target để liên kết giữa Label và điều khiển đích. Sử dụng WPF binding và dùng thuộc tính ElementName sẽ được mô tả ở phần sau của bài hướng dẫn này. Phần binding dựa trên tên của điều khiển đích, nếu bạn đổi tên của điều khiển đó, bạn cần nhớ cập nhật lại cho phần binding cho chính xác.

Sử dụng các điều khiển làm nội dung của Label

Như đã đề cập ở trên, Label cho phép bạn chứa các điều khiển khác trong khi vẫn giữ được các ưu điểm khác. Cùng thử một ví dụ mẫu ở dưới, chúng ta có cả một ảnh và đoạn văn bản bên trong Label, trong khi vẫn có thể sử dụng khóa truy cập cho từng label:

<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlAdvancedSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="LabelControlAdvancedSample" Height="180" Width="250">
	<StackPanel Margin="10">
		<Label Target="{Binding ElementName=txtName}">
			<StackPanel Orientation="Horizontal">
				<Image Source="http://cdn1.iconfinder.com/data/icons/fatcow/16/bullet_green.png" />
				<AccessText Text="_Name:" />
			</StackPanel>
		</Label>
		<TextBox Name="txtName" />
		<Label Target="{Binding ElementName=txtMail}">
			<StackPanel Orientation="Horizontal">
				<Image Source="http://cdn1.iconfinder.com/data/icons/fatcow/16/bullet_blue.png" />
				<AccessText Text="_Mail:" />
			</StackPanel>
		</Label>
		<TextBox Name="txtMail" />
	</StackPanel>
</Window>

Đây chỉ là một ví dụ mở rộng của ví dụ trước, thay vì dùng một chuỗi ký tự đơn giản, Label giờ còn có thêm ảnh và đoạn văn bản (bên trong AccessText, có thể cho phép chúng ta sử dụng khóa truy cập cho label). Cả hai điều khiển đều nằm trong StackPanel ngang vì Label như các ContentControl khác, chỉ cho phép chứa trực tiếp một điều khiển con.

Image control được dùng ở trên sẽ được hướng dẫn trong các bài khác, tuy nhiên sử dụng một ảnh từ xa ở đây chỉ được dùng với mục đích thị phạm, KHÔNG nên dùng trong ứng dụng thực tế.

Tổng kết

Trong phần lớn các trường hợp, điề khiển Label làm chính xác những gì hàm ý theo tên gọi của nó: Hoạt động như một nhãn văn bản cho các điều khiển khác. Và đấy cũng chính là mục đích chính của nó. Còn ở các trường hợp khác, bạn có thể chỉ nên dùng Textblock hoặc một vài bộ chứa văn bản khác mà WPF cung cấp.


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!