TOC

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

العناصر الأساسية:

The TextBox control

إن عنصر تحكم مربع النص هو أكثر عناصر ادخال النصوص أهمية في WPF, والتي تسمح للمستخدم بكتابة نصوص بسيطة ، إما سطر أحادي كدخل لمربع حوار , أو متعدد الأسطر كمحرر النصوص.

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

هذا كل ما انت بحاجة اليه لتحصل على مربع نص . لقد أضفت النص بعد تشغيل المثال و قبل أخذ لقطة شاشة , إلا انه بإمكانك فعل ذلك عبر الوسوم أيضاً: لتقوم بتعبئة مربع النص مسبقاً باستخدام خاصية النص.

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

حاول الضغط ضمن مربع النص. ستحصل على قائمة من الخيارات, التي تتيح لك استخدام مربع النص مع حافظة الويندوز. الاختصارات لعمليات التراجع و الغاء التراجع (Ctrl+Z and Ctrl+Y) أيضا لابد لها أن تعمل و جميع هذه الوظائف تحصل عليها بالمجان!

Multi-line TextBox

إذا قمت بتنفيذ المثال السابق, ستلاحظ أن عنصر تحكم مربع النص افتراضيا عبارة عن سطر واحد فقط. حتى إن ضغطت زر الادخال Enter لن يحدث ينول مؤشر الكتابة سطرا جديدا و في حال اضفت نصا حروفه لا تتسع في مربع النص سيظهر لك شريط تمرير للعنصر.ومع ذلك فإن من السهولة بمكان أن تجعل مربع النص من عدة الاسطر .

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

I have added two properties: The AcceptsReturn makes the TextBox into a multi-line control by allowing the use of the Enter/Return key to go to the next line, and the TextWrapping property, which will make the text wrap automatically when the end of a line is reached.

Spellcheck with TextBox

As an added bonus, the TextBox control actually comes with automatic spell checking for English and a couple of other languages (as of writing, English, French, German, and Spanish languages are supported).

إنها أقرب ما يمكن في عملها لبيئة مايكروسوفت وورد , حيث يضع خطا تحت الأخطاء الإملائية، و يكون بإمكانك نقره بزر الفأرة اليميني : لتحصل على بدائل مقترحة للخطأ. إن تفعيل ميزة تصحيح الأخطاء الإملائية سهل جداً.

<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 , فهي ببساطة تتيح إمكانية فحص الأخطاء الإملائية في متحكم الاب , و خاصية اللغة التي تُعلِم متفحص الأخطاء الإملائية أي اللغات ليستخدم.

Working with TextBox selections

Just like any other editable control in Windows, the TextBox allows for selection of text, e.g. to delete an entire word at once or to copy a piece of the text to the clipboard. The WPF TextBox has several properties for working with selected text, all of them which you can read or even modify. In the next example, we will be reading these properties:

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

The example consists of two TextBox controls: One for editing and one for outputting the current selection status to. For this, we set the IsReadOnly property to true, to prevent editing of the status TextBox. We subscribe the SelectionChanged event on the first TextBox, which we handle in the 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 + "'";
		}
	}
}

We use three interesting properties to accomplish this:

SelectionStart , which gives us the current cursor position or if there's a selection: Where it starts.

SelectionLength , which gives us the length of the current selection, if any. Otherwise it will just return 0.

SelectedText , which gives us the currently selected string if there's a selection. Otherwise an empty string is returned.

Modifying the selection

All of these properties are both readable and writable, which means that you can modify them as well. For instance, you can set the SelectionStart and SelectionLength properties to select a custom range of text, or you can use the SelectedText property to insert and select a string. Just remember that the TextBox has to have focus, e.g. by calling the Focus() method first, for this to work.

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!