2010-01-04 2 views
1

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

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

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

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

ответ

2

ИТАК, наконец, я посмотрел в исходный код из 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

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

<TextBox Text="{Binding DateText, 
       Converter={StaticResource MyConverter}, 
       UpdateSourceTrigger=LostFocus}"/> 
+0

Это кажется хорошим решением в теории, однако для DatePicker, МОФ бьет меня к обращению и исключения бросается на LostFocus «Строка не была признана действительной DateTime.». Как я могу сделать преобразование «до того, как» wpf framework попытается сделать это для меня? Я искушаюсь использовать решение lostFocus. Winforms-style :( – Tewr

+0

Подождите, вы используете 'TextBox' или' DatePicker' из инструментария WPF? –

+0

wpf toolkit DatePicker – Tewr

Смежные вопросы