This article is currently in the process of being translated into Hebrew (~88% done).
The TextBox control
פקד תיבת הטקסט (TextBox Control) הוא הפקד הבסיסי ביותר להכנסת טקסט ב WPF, המאפשר למשתמש הקצה לכתוב טקסט פשוט, או בשורה אחת, לקלט בתיבת דיאלוג, או במספר שורות, כמו בעורך טקסט.
תיבת טקסט של שורה אחת
פקד תיבת הטקסט כל כך נפוץ בשימוש שלמעשה אין צורך להשתמש בכל תכונה כלשהי, כדי לקבל שדה טקסט הניתן לעריכה באופן מלא. הנה דוגמה בסיסית ללא כל תוספות:
<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>
זה כל מה שצריך כדי לקבל שדה טקסט. הוספתי את הטקסט לאחר שהאצתי את הדוגמה ולפני שצילמתי את המסך, אבל ניתן גם לעשות זאת גם על ידי markup, כדי למלא את תיבת הטקסט מראש תוך שימוש בתכונה Text:
<TextBox Text="Hello, world!" />
נסה ללחוץ על הכפתור הימני של העכבר בתוך תיבת הטקסט. תקבל תפריט המאפשר לך להשתמש בתיבת הטקסט עם לוח הכתיבה של חלונות (clipboard). מקשי ברירת המחדל לביטול וחזרה (Ctrl+Z ו Ctrl+Y) צריכים לעבוד גם הם, ואת כל הפונקציונליות הזו תקבל בחינם!
תיבת טקסט של מספר שורות
אם תריץ את הדוגמה הנ"ל, תוכל להבחין בכך שפקד תיבת הטקסט בברירת המחדל הוא בן שורה אחת. כלום לא קורה כשתלחץ 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>
הוספתי שתי תכונות: AcceptReturns הופכת את הפקד לבעל מספר שורות על ידי כך שמרשים למשתמש להשתמש במקש מעבר שורה (Enter/Return) כדי לעבור לשורה הבאה, והתכונה TextWrapping, שגורמת למעבר שורה אוטומטית כשמגיעים לקצה השורה.
בדיקת איות בתיבת הטקסט
כבונוס נוסף, פקד תיבת הטקסט למעשה מגיע עם בדיקת איות אוטומטית לאנגלית ולמספר שפות נוספות (נכון לזמן הכתיבה, אנגלית, צרפתית, גרמנית וספרדית הן השפות שנתמכות).
זה עובד בדומה למייקרוסופט וורד, היכן שטעויות איות מודגשות בקו תחתי וניתן ללחוץ עליהן עם הכפתור הימני של העכבר כדי לקבל הצעות חלופיות. מאד קל לאפשר בדיקות איות:
<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>
השתמשנו בדוגמה הקודמת של תיבת טקסט של מספר שורות כבסיס ואז הוספתי שתי תכונות חדשות: התכונה המצורפת מהמחלקה SpellCheck נקראת IsEnabled, שפשוט מאפשרת בדיקת איות על הפקד-האב, ותכונת השפה, שאומרת לבודק האיות באיזו שפה להשתמש.
עבודה עם בחירה (Selection) בתיבת טקסט
כמו בכל פקד אחר שניתן לעריכה בחלונות, תיבת הטקסט מאפשרת לבחור טקסט, למשל למחוק מילה שלמה בבת אחת או להעתיק חלק מהטקסט ללוח ההעתקה (clipboard). לתיבת הטקסט של WPF יש מספר תכונות כדי לעבוד עם בחירת טקסט, את כולם ניתן לקרוא או אפילו לשנות. בדוגמה הבאה, נקרא חלק מהתכונות הללו:
<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 + "'";
}
}
}
השתמשנו בשלוש תכונות מעניינות כדי להשיג זאת:
SelectionStart - התחלת הבחירה - שנותנת את מיקום הסמן הנוכחי, או אם יש בחירה: היכן היא מתחילה.
SelectionLength - אורך הבחירה - שנותנת את אורך הבחירה הנוכחית, אם יש כזו. אחרת, היא פשוט מחזירה 0.
SelectedText - טקסט נבחר - הנותנת את המחרוזת הנבחרת הנוכחית, אם יש בחירה. אחרת, מה שמוחזר זו מחרוזת ריקה.
שינוי הבחירה
כל התכונות הללו ניתנות גם לקריאה וגם לכתיבה, מה שאומר שניתן גם לשנות אותן. למשל, אפשר להציב ערכים ב SelectionStart ו SelectionLength כדי לבחור טווח טקסט הניתן להתאמה, או להשתמש בתכונה SelectedText כדי להכניס מחרוזת ולבחור אותה. צריך רק לזכור שלתיבת הטקסט צריך להיות מיקוד (Focus), כלומר יש לקרוא קודם כל לפונקציה Focus(), כדי שזה יעבוד.