TOC

This article has been localized into Vietnamese by the community.

Các control cơ bản:

TextBox control

TextBox là control cơ bản nhất để nhập liệu trong WPF, cho phép người dùng nhập văn bản thuần ,hoặc là trên cùng 1 dòng, hoặc cho đối thoại, hoặc trên nhiều dòng như trình soạn thảo

Đơn dòng (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!" />

Thử nhấp phải chuột vào TextBox. Bạn sẽ có 1 danh sách các sự lựa chọn, cho phép bạn dùng TextBox với Windows Clipboard. 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.

Đa dòng(Multi-line) TextBox

Nếu bạn chạy ví dụ trên, bạn sẽ thấy rằng TextBox control mặc định là 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>

Tôi đã thêm thêm 2 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 đến cuối hàng.

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

TextBox control đi kèm với chức năng kiểm tra chính tả tự động 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ợ ở thời điểm bài được viết)

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. Cách bật chức năng kiểm tra chính tả 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 đó tôi đã thêm 2 thuộc tính mới: thuộc tính đính kèm 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 để sử dụng.

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

Cũng giống như bất cứ control có thể thay đổi nội dung nào khác trên Windows, TextBox cho phép chọn vùng văn bản, ví dụ: để xóa nguyên 1 chữ cùng 1 lúc hoặc sao chép 1 phần văn bản vào clipboard. WPF TextBox cũng có một vài thuộc tính để làm việc với đoạn văn bản được chọn, bản có thể đọc hoặc chính sửa tất cả bọn chúng(thuộc tính). 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 để 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 ta vị trí hiện tại của con trỏ hoặc vị trí nơi 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à có thể đọc và ghi, đ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, ví dụ như 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!