我使用wpf/c#創建表單。我期待以編程方式更改/解釋wpf toolkit DatePicker
中的用戶輸入的輸入。WPf Datepicker輸入修改
例如,用戶輸入「Today」,當控件失去焦點時,日期被解釋並使用我的c#函數設置爲當前日期。
我應該聽lostFocus事件嗎?還是有更好的方法來改變輸入日期的解析方式?
我不介意更改日期選擇器的顯示格式。我正在使用mvvm模式開發此應用程序。
我使用wpf/c#創建表單。我期待以編程方式更改/解釋wpf toolkit DatePicker
中的用戶輸入的輸入。WPf Datepicker輸入修改
例如,用戶輸入「Today」,當控件失去焦點時,日期被解釋並使用我的c#函數設置爲當前日期。
我應該聽lostFocus事件嗎?還是有更好的方法來改變輸入日期的解析方式?
我不介意更改日期選擇器的顯示格式。我正在使用mvvm模式開發此應用程序。
好了,所以最後我看着的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;
}
}
}
}
}
值轉換器的典型場景。定義一個接受string
並將其轉換爲DateTime
的值轉換器。在你的綁定,定義UpdateSourceTrigger
是LostFocus
這樣的:
<TextBox Text="{Binding DateText,
Converter={StaticResource MyConverter},
UpdateSourceTrigger=LostFocus}"/>
這似乎是在理論上一個很好的解決方案,但是在日期選擇器,在WPF我百思不得其解的轉換和異常丟在'LostFocus'上'「字符串未被識別爲有效的DateTime。」'。我怎麼能在wpf框架試圖爲我做這件事之前進行轉換?我試圖使用lostFocus事件解決方案。winforms-style :( – Tewr 2010-01-07 09:47:57
等待,您是否使用WPF工具包中的「TextBox」或「DatePicker」? – 2010-01-07 09:49:58
wpf toolkit DatePicker – Tewr 2010-01-07 09:53:25