2011-02-11 5 views
1

У меня есть TextBox, который я хочу, чтобы мои пользователи вводили значение времени в формате XX: XX: XX. У меня уже есть проверка, чтобы убедиться, что они вводят его в этом формате. Тем не менее, теперь я хотел бы иметь двоеточия там автоматически. Я хотел бы, чтобы они были в текстовом поле, и, когда пользователь вводит числа, они просто пропускают двоеточия. Возможно ли иметь какой-то декодер формата для TextBox?WPF Текстовое поле использует текст по умолчанию

EDIT: Я использую WPF 4.

ответ

4

вы можете использовать замаскированную текстовое поле из МОФ инструментария

http://wpftoolkit.codeplex.com/wikipage?title=MaskedTextBox&referringTitle=Home

+0

Выглядит неплохо, но я предпочел бы остаться с ванильным WPF, если это вообще возможно. Я использую WPF 4. – s73v3r

+0

Если вы не хотите использовать весь набор инструментов, хотя это того стоит, потому что есть некоторые отличные элементы управления, вы можете получить доступ к источнику и вытащить [только тот элемент управления, который вам нужен] (http://wpftoolkit.codeplex.com/SourceControl/changeset/view/68480#1679740) –

+1

Я согласен с @Tom Dudfield. Там много тонких вещей. Вы не найдете функции, запеченные в WPF, и вы, скорее всего, в конечном итоге сделаете то, что делает инструментарий (исходя из текстового поля по умолчанию и сворачивая ваш собственный), но без усиления ... –

0

Если вы хотите придерживаться ванильным WPF вы можете создать пользовательский элемент управления и добавьте 3 текстовых поля.

Поместите двоеточие между ними и обработайте события нажатия клавиш, чтобы передать фокус из одного текстового поля в другое и одновременно принять номера.

Снова: с помощью инструментария может быть меньше работы.

0

Использование трех текстовых блоков, предложенных Erno, вероятно, является лучшим решением, но вы также можете использовать событие TextChanged, чтобы добавить двоеточия в текст (что может смутить пользователя), вот код, который будет вставлять их после второго и пятый символ:

private void TextBox_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    TextBox tb = sender as TextBox; 
    if (e.Changes.Count == 1) 
    { 
     if (e.Changes.ElementAt(0).AddedLength == 1 && (tb.Text.Length == 2 || tb.Text.Length == 5)) 
     { 
      tb.Text += ":"; 
      tb.SelectionStart = tb.Text.Length; 
     } 
    } 
} 
Смежные вопросы