WPf Datepicker Входная модификация - PullRequest
2 голосов
/ 04 января 2010

Я создаю форму, используя wpf / c #. Я хочу программно изменить / интерпретировать введенный пользователем ввод в wpf toolkit DatePicker.

Например, пользователь вводит «Сегодня», и когда элемент управления теряет фокус, дата интерпретируется и устанавливается на текущую дату с помощью моей функции c #.

Должен ли я слушать событие lostFocus или есть лучший способ изменить способ анализа введенной даты ввода?

Мне все равно, чтобы изменить формат отображения выбора даты. Я разрабатываю это приложение, используя шаблон mvvm.

Ответы [ 2 ]

3 голосов
/ 07 января 2010

Хорошо, наконец, я посмотрел на исходный код DatePicker, и я мало что могу сделать с точки зрения конвертеров и т. Д., Поскольку большинство вещей является закрытым, и только два доступных формата - «короткий» и «длинный». Наконец, мне придется создать свой собственный элемент управления, возможно, частично с использованием решения Aviad, описанного выше. Тем не менее, вот быстрое временное решение до тех пор (где DateHelper - мой класс анализатора):

   public class CustomDatePicker : DatePicker
    {
        protected override void OnPreviewKeyDown(KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                this.TryTransformDate();
            }

            base.OnPreviewKeyDown(e);
        }

        protected override void OnPreviewLostKeyboardFocus(KeyboardFocusChangedEventArgs e)
        {
            this.TryTransformDate();
            base.OnPreviewLostKeyboardFocus(e);
        }

        protected void TryTransformDate()
        {
            DateTime tryDate;
            if (DateHelper.TryParseDate(this.Text, out tryDate))
            {
                switch (this.SelectedDateFormat)
                {
                    case DatePickerFormat.Short: 
                        {
                            this.Text = tryDate.ToShortDateString();
                            break;
                        }

                    case DatePickerFormat.Long: 
                        {
                            this.Text = tryDate.ToLongDateString();
                            break;
                        }
                }
            }

        }
    }
1 голос
/ 04 января 2010

Типичный сценарий для преобразователя значений. Определите преобразователь значения, который принимает string и преобразует его в DateTime. В привязке определите UpdateSourceTrigger как LostFocus, таким образом:

<TextBox Text="{Binding DateText, 
                Converter={StaticResource MyConverter}, 
                UpdateSourceTrigger=LostFocus}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...