TOC

This article has been localized into Ukrainian by the community.

Основні елементи керування:

Елемент керування TextBox

TextBox - це головний елемент управління для введення тексту в WPF. Він дозволяє кінцевому користувачу написати звичайний текст в одному рядку, наприклад в діалоговому вікні, або в кількох рядках, як от в редакторі

Однорядковий TextBox

TextBox - це настільки звична річ, що вам не потрібно використовувати жодні властивості, щоб отримати повноцінне текстове поле. Тут показано приклад з порожнім TextBox.

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

Це все, що вам потрібно, щоб отримати текстове поле. Після запуску зразка я додав до нього текст. Однак ви можете заповнити поле наперед, використовуючи властивість Text у розмітці.

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

Спробуйте натиснути ПКМ на TextBox. Ви побачите контекстне меню, що дозволяє застосовувати буфер обміну Windows при роботі з полем. Також тут можна застосувати комбінації клавіш за умовчуванням, для відміни останньої дії та її повторення (Ctrl + Z та Ctrl + Y).

Багаторядковий TextBox

Якщо ви запустите приклад вище, то помітите, що елемент TextBox за умовчуванням - однорядковий. Якщо ви натиснете Enter, то нічого не трапиться, а якщо додасте більше тексту, ніж може вміститися, то поле просто прокрутиться. Однак зробити TextBox багаторядковим дуже просто.

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

Я додав дві властивості: AcceptsReturn дозволяє переходити на новий рядок, використовуючи клавішу Enter/Return; а TextWrapping робить перенесення тексту при заповненні рядка автоматичним.

Перевірка орфографії в TextBox

Як бонус, елемент TextBox містить автоматичну перевірку орфографії для англійської та кількох інших мов (на момент написання підтримуються французька, німецька та іспанська).

Це працює подібно до того, як у Microsoft Word, де орфографічні помилки підкреслюються, а ви можете клацнути на них ПКМ, щоб отримати пропозиції для заміни. Увімкнути цю функцію дуже просто:

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

Ми використали попереднє багаторядкове поле, як основу, до якої я додав дві нові властивості: IsEnabled (вбудована властивість класу SpellCheck), яка вмикає перевірку орфографії на елементі керування, та властивість Language, яка відповідає за те, яку мову слід перевіряти.

Робота з виділенням у TextBox

Як і будь-який придатний для редагування елемент управління у Window, TextBox дозволяє виділяти текст, наприклад, щоб видалити слово чи скопіювати частину тексту в буфер обміну. WPF TextBox маэ кілька властивостей для роботи з виділенням, які можна читати або навіть модифікувати. В наступному прикладі ми будемо читати ці властивості.

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

Приклад містить два елементи TextBox. Один для редагування, а інший для виводу поточного стану виділення. Для цього ми встановимо значення true для властивості IsReadOnly, щоб уникнути редагування поля для показу статусу. Ми підписуємось на подію SelectionChanged на першому TextBox, який показано в коді нижче.

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 + "'";
		}
	}
}

Для реалізації цього, ми можемо використати 3 цікааві властивості.

SelectionStart, який показує нам поточну позицію курсору, або точку початку виділення, якщо воно є.

SelectionLength, який повертає довжину поточного виділення, якщо воно наявне, інакше 0.

SelectedText, який повертає нам виділений рядок, якщо такий є, інакше порожній рядок.

Модифікація виділення

Усі ці властивості можуть, і читатися, і записуватися. Це значить, що ви їх так само можете модифікувати. Наприклад ви можете встановити значення властивостей SelectionStart та SelectionLength, щоб виділити певну частину тексту, або властивість SelectedText, щоб вставити чи виділити рядок. Для того, щоб усе уе працювало TextBox повинен мати на собі фокус, тому спочатку викличіть метод 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!