Как сделать маску для TextBox в WPF?
Столкнулся с такой проблемой: в windows forms есть элемент называется maskedtextbox. Вся его суть что можно сделать маску и в нее будут заполняться значения. Служит своего рода шаблоном для заполнения. Так вот полазив я не нашел в WPF похожего. Может кто подсказать есть ли аналог или может что-то подключить надо для этого?
Я решил сам сделать маску для wpf, но сразу столкнулся с проблемой. В данном случае мне надо чтобы номера телефона водились по такому шаблону +7 ___ _--__. В коде C#:
private void MaskedTextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
// Если символ не является числом, то не допускаем его ввод
if (!char.IsDigit(e.Text[0]))
{
e.Handled = true;
return;
}
// Получаем индекс следующего не заполненного символа в маске (шаблон)
int index = txtNumberPhone.Text.IndexOf('_');
// Если индекс не найден, отменяем ввод символов
if (index == -1)
{
e.Handled = true;
return;
}
// Заменяем следующий не заполненный символ на введенный символ
txtNumberPhone.Text = txtNumberPhone.Text.Remove(index, 1).Insert(index, e.Text);
// Устанавливаем курсор на следующий не заполненный символ в маске (шаблоне)
txtNumberPhone.CaretIndex = index + 1;
e.Handled = true;
}
XAML
:
Text="+7 ___ ___-__-__" PreviewTextInput="MaskedTextBox_PreviewTextInput"
Но я не знаю как сделать чтобы при нажатие на backspace или delete возвращался _ и можно было ввести снова число. Надеюсь кому то поможет такой способ.
Источник: Stack Overflow на русском