TOC

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

Các control cơ bản:

TextBox control

TextBox là control cơ bản để nhập liệu trong WPF, nó cho phép người dùng nhập văn bản đơn giản chỉ gồm các ký tự trên một dòng như hộp thoại nhập liệu, hoặc trên nhiều dòng như trình soạn thảo.

Single-line TextBox

Thông thường thì bạn không cần thiết phải sử dụng bất cứ thuộc tính nào của TextBox để tạo ra một trường nhập liệu. Sau đây là một ví dụ cơ bản:

<Window x:Class="WpfTutorialSamples.Basic_controls.TextBoxSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="TextBoxSample" Height="80" Width="250">
    <StackPanel Margin="10">
		<TextBox />
	</StackPanel>
</Window>

Đó là tất cả những gì bạn cần để có một trường nhập chuỗi ký tự. Tôi đã thêm chuỗi ký tự vào TextBox sau khi chạy ví dụ và chụp màn hình, nhưng bạn cũng có thể thực hiện nó thông qua việc khai báo bằng cách sử dụng thuộc tính Text để điền nội dung trước khi chạy.

<TextBox Text="Hello, world!" />

Hãy thử nhấp phải chuột vào TextBox. Bạn sẽ có 1 menu các sự lựa chọn, cho phép bạn dùng TextBox với bộ đệm của Windows. Những phím tắt mặc định cho việc undo và redo (Ctrl+Z và Ctrl+Y) cũng sẽ hoạt động, và tất cả những chức năng này đã có sẵn.

Multi-line TextBox

Nếu bạn chạy ví dụ trên, bạn sẽ thấy rằng TextBox mặc định là control 1 dòng (single-line). Sẽ chẳng có gì xảy ra khi bạn nhấn Enter và nếu bạn nhập thêm ký tự nhiều hơn những gì có thể vừa trên 1 dòng thì control chỉ cuộn ngang. Tuy nhiên để tạo 1 TextBox nhiều dòng (multi-line) thì rất đơn giản:

<Window x:Class="WpfTutorialSamples.Basic_controls.TextBoxSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="TextBoxSample" Height="160" Width="280">
    <Grid Margin="10">
		<TextBox AcceptsReturn="True" TextWrapping="Wrap" />
	</Grid>
</Window>

Bạn chỉ việc thêm 2 thuộc tính. Thuộc tính AcceptReturn biến TextBox thành 1 control nhiều dòng (multi-line) bằng cách cho phép sử dụng phím Enter/Return để đến dòng tiếp theo, và thuộc tính TextWrapping cho phép văn bản tự động xuống dòng khi chạm điểm cuối của TextBox.

Kiểm tra chính tả với TextBox

Như một khuyến mãi thêm, TextBox đi kèm với chức năng tự động kiểm tra chính tả cho tiếng Anh và một vài ngôn ngữ khác (Pháp, Đức và Tây Ban Nha cũng được hỗ trợ)

Nó hoạt động giống như Microsoft Word, những lỗi chính tả sẽ được gạch chân và bạn có thể nhấp phải chuột vào nó để có gợi ý thay đổi. Việc cho phép kiểm tra chính tả là rất đơn giản:

<Window x:Class="WpfTutorialSamples.Basic_controls.TextBoxSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="TextBoxSample" Height="160" Width="280">
    <Grid Margin="10">
		<TextBox AcceptsReturn="True" TextWrapping="Wrap" SpellCheck.IsEnabled="True" Language="en-US" />
	</Grid>
</Window>

Chúng ta đã trải qua ví dụ cơ bản về multi-line TextBox ở trên, sau đó I đã thêm 2 thuộc tính mới: thuộc tính attached từ lớp SpellCheck gọi là IsEnabled cho phép kiểm tra chính tả trên control mà nó được gắn vào; và thuộc tính Language dùng để chỉ định ngôn ngữ nào cần được kiểm tra chính tả.

Làm việc với vùng chọn của TextBox

Cũng giống như bất cứ control nhập liệu nào khác trên Windows, TextBox cho phép chọn những ký tự để, ví dụ: để xóa tất cả các chữ 1 lần hoặc sao chép 1 phần văn bản vào bộ đệm. WPF TextBox cũng có một vài thuộc tính để làm việc với việc chọn trên văn bản, bạn có thẻ đọc hoặc thậm chí sửa đổi trên đó. Trong ví dụ tiếp theo chúng ta sẽ đọc những thuộc tính này:

<Window x:Class="WpfTutorialSamples.Basic_controls.TextBoxSelectionSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="TextBoxSelectionSample" Height="150" Width="300">
	<DockPanel Margin="10">
		<TextBox SelectionChanged="TextBox_SelectionChanged" DockPanel.Dock="Top" />
		<TextBox Name="txtStatus" AcceptsReturn="True" TextWrapping="Wrap" IsReadOnly="True" />

	</DockPanel>
</Window>

Ví dụ trên gồm 2 TextBox: một dùng để nhập liệu và một dùng cho việc thể hiện trạng thái chọn lựa đang thực hiện. Để thực hiện chúng ta gán thuộc tính IsReadOnly là true, để tránh việc sửa trạng thái của TextBox. Chúng ta đăng ký sự kiện SelectionChanged trên TextBox đầu tiên để chúng ta có thể xử lý nó trong phần Code-behind:

using System;
using System.Text;
using System.Windows;
using System.Windows.Controls;

namespace WpfTutorialSamples.Basic_controls
{
	public partial class TextBoxSelectionSample : Window
	{
		public TextBoxSelectionSample()
		{
			InitializeComponent();
		}

		private void TextBox_SelectionChanged(object sender, RoutedEventArgs e)
		{
			TextBox textBox = sender as TextBox;
			txtStatus.Text = "Selection starts at character #" + textBox.SelectionStart + Environment.NewLine;
			txtStatus.Text += "Selection is " + textBox.SelectionLength + " character(s) long" + Environment.NewLine;
			txtStatus.Text += "Selected text: '" + textBox.SelectedText + "'";
		}
	}
}

Chúng ta sử dụng 3 thuộc tính thú vị để hoàn thành ví dụ:

SelectionStart cho phép chúng ta lấy vị trí bắt đầu của vùng chọn.

SelectionLength cho phép chúng ta lấy chiều dài của vùng chọn hiện tại nếu có. Nếu không có sẽ trả về 0.

SelectedText cho phép chúng ta lấy chuỗi ký tự nằm trong vùng chọn hiện hành. Nếu không có sẽ trả về chuỗi rỗng.

Thay đổi vùng chọn

Tất cả các thuộc tính ở đây thì đều là readable và writable, điều này có nghĩa bạn cũng có thể sửa chúng. Chẳng hạn, bạn có thể gán thuộc tính SelectionStart và SelectionLength để chọn 1 vùng văn bản bất kỳ nào, hoặc bạn có thể dùng thuộc tính SelectedText để chèn và chọn 1 chuỗi. Chỉ lưu ý rằng trước khi thực hiện công việc đó TextBox cần phải được trỏ vào, bằng cách sử dụng phương thức Focus().

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!