我使用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