2010-01-04 256 views
1

我使用wpf/c#创建表单。我期待以编程方式更改/解释wpf toolkit DatePicker中的用户输入的输入。WPf Datepicker输入修改

例如,用户输入“Today”,当控件失去焦点时,日期被解释并使用我的c#函数设置为当前日期。

我应该听lostFocus事件吗?还是有更好的方法来改变输入日期的解析方式?

我不介意更改日期选择器的显示格式。我正在使用mvvm模式开发此应用程序。

回答

2

好了,所以最后我看着的DatePicker的源代码和theres没有多少,我可以在转换器等方面做的最多的事是私人的,仅有的两个可用的格式是“短”和“长”。最后,我将不得不创建自己的控件,可能部分使用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的值转换器。在你的绑定,定义UpdateSourceTriggerLostFocus这样的:

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

这似乎是在理论上一个很好的解决方案,但是在日期选择器,在WPF我百思不得其解的转换和异常丢在'LostFocus'上'“字符串未被识别为有效的DateTime。”'。我怎么能在wpf框架试图为我做这件事之前进行转换?我试图使用lostFocus事件解决方案。winforms-style :( – Tewr 2010-01-07 09:47:57

+0

等待,您是否使用WPF工具包中的“TextBox”或“DatePicker”? – 2010-01-07 09:49:58

+0

wpf toolkit DatePicker – Tewr 2010-01-07 09:53:25