Есть ли способ применить маску к текстовому полю DatePicker? - PullRequest
1 голос
/ 08 сентября 2010

Я работаю над своим первым приложением WPF. В этом случае, используя VS 2010. Мои пользователи привыкли печатать дату следующим образом: «09082010» (без двойных кавычек; это будет представлять сегодня). После того, как они введут это, тогда это преобразовано в 8/9/2010. Я поместил элемент управления DatePicker на страницу WPF, но если пользователь вводит 09082010, он не распознает его как дату и игнорирует его. Я применил IValueConverter, но безрезультатно, потому что он не распознает «09082010» как дату. Итак, мне интересно, можно ли применить маску к текстовому полю DatePicker в VS 2010, чтобы при вводе пользователем 09082010 это значение было изменено на 08/08/2010 (как минимум)?

1 Ответ

2 голосов
/ 08 сентября 2010

Вот что вы, вероятно, могли бы сделать: обработать событие TextBox.TextChanged в DatePicker, а затем в обработчике событий поместить вашу собственную логику для анализа текущего текста.Примерно так:

<DatePicker x:Name="dp" TextBoxBase.TextChanged="DatePicker_TextChanged"/>

private void DatePicker_TextChanged(object sender, TextChangedEventArgs e)
        {
            DateTime dt;
            DatePicker dp = (sender as DatePicker);
            string currentText = (e.OriginalSource as TextBox).Text;
            if (!DateTime.TryParse(currentText, out dt))
            {
                try
                {
                    string month = currentText.Substring(0,2);
                    string day = currentText.Substring(2,2);
                    string year = currentText.Substring(4,4);

                    dt = new DateTime(int.Parse(year), int.Parse(month), int.Parse(day));
                    dp.SelectedDate = dt;
                }
                catch (Exception ex)
                {
                    dp.SelectedDate = null;
                }
            }

        }

Я знаю, это не красиво.Но это может быть началом.

...