2010-01-04 260 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