Placeholder
Посещая различные ресурсы сети Интернет, каждый из нас практически постоянно сталкивается с полями, которые по умолчанию заполнены определенным текстом, например, образцом заполнения полей для ввода логина или пароля. Все поля, которые предварительно заполнены текстом-подсказкой, имеют светло-серый цвет. Если пользователь щелкает в этом поле, текст исчезает, и он может вводить текст. Данные поля очень удобны для пользователей: во-первых, они позволяют пользователю визуально различать заполненные и незаполненные поля, что делает работу с ресурсом более удобной — для этого используется цветовая гамма. Во-вторых, определяется формат ввода данных в выбранное поле, что обеспечивает быстроту работы с ресурсом — пользователь не тратит время на повторный ввод данных — ошибится форматом практически не возможно.
Реализовать данные поля возможно не только в верстке веб-ресурсов, существует и возможность реализации в Windows Phone 7. Код, реализующий данную функцию, представлен ниже. Наличие текста-подсказки определяется с помощью выставления атрибута TextBoxText.
xmlns:controls="clr-namespace:WatermarkTextBox" ... <controls:WatermarkTextBox WatermarkText="Введите Ваш e-mail" />
public class WatermarkTextBox : TextBox
{
public string WatermarkText
{
get { return (String)this.GetValue(WatermarkTextProperty); }
set { this.SetValue(WatermarkTextProperty, value); }
}
public static readonly DependencyProperty WatermarkTextProperty =
DependencyProperty.Register("WatermarkText", typeof(String), typeof(WatermarkTextBox), new PropertyMetadata(String.Empty));
public SolidColorBrush WatermarkForeGroundColor = Application.Current.Resources["PhoneTextBoxReadOnlyBrush"] as SolidColorBrush;
public WatermarkTextBox()
{
Loaded += new RoutedEventHandler(WatermarkTextBox_Loaded);
}
void WatermarkTextBox_Loaded(object sender, RoutedEventArgs e)
{
this.Text = !String.IsNullOrEmpty(WatermarkText) ? WatermarkText : String.Empty;
this.Foreground = WatermarkForeGroundColor;
}
protected override void OnGotFocus(RoutedEventArgs e)
{
base.OnGotFocus(e);
if (WatermarkText == this.Text)
{
this.Text = String.Empty;
this.Foreground = Application.Current.Resources["PhoneTextBoxForegroundBrush"] as SolidColorBrush;
}
}
protected override void OnLostFocus(RoutedEventArgs e)
{
base.OnLostFocus(e);
if (String.IsNullOrEmpty(this.Text))
{
this.Text = !String.IsNullOrEmpty(WatermarkText) ? WatermarkText : String.Empty;
this.Foreground = WatermarkForeGroundColor;
}
}
}