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