WPF 4.0 DatePicker 快速录入

简介: WPF 4.0的DatePicker在通过键盘录入日期的时候是非常让人郁闷的。必须按照日期的格式来完整输入例如,比如输入“2010/10/10”才能识别。而实际上在一些要求快速录入的场合,用户更希望直接敲20101010就行了。

WPF 4.0的DatePicker在通过键盘录入日期的时候是非常让人郁闷的。必须按照日期的格式来完整输入
例如,比如输入“2010/10/10”才能识别。而实际上在一些要求快速录入的场合,用户更希望直接敲20101010就行了。
遗憾的是,DatePicker没有一个属性可以设置说录入的格式是yyyyMMdd这种的。

实际上,仔细看一下DatePicker控件,它有一个DateValidationError事件,当输入的文本无法识别为日期时,就会触发该事件。我们可以利用这个事件来做一些事情。

为了方便使用,我们可以封装一个附加属性,在需要快速录入的地方Attach一下就好了。

public static readonly DependencyProperty EnableFastInputProperty =
         DependencyProperty.RegisterAttached("EnableFastInput", typeof(bool), typeof(DatePickerHelper),
                new FrameworkPropertyMetadata((bool)false,
                new PropertyChangedCallback(OnEnableFastInputChanged)));

public static bool GetEnableFastInput(DependencyObject d)
{
       return (bool)d.GetValue(EnableFastInputProperty);
}

public static void SetEnableFastInput(DependencyObject d, bool value)
{
       d.SetValue(EnableFastInputProperty, value);
}

这样,我们就给一个DatePickerHelper类型注册了一个附加属性,叫做EnableFastInput。
在这个属性的PropertyChanged事件处理函数中,我们监听DatePicker的DateValidationError事件
private static void OnEnableFastInputChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
      var datePicker = d as DatePicker;
      if (datePicker != null)
      {
            if ((bool)e.NewValue)
            {
                  datePicker.DateValidationError += DatePickerOnDateValidationError;
            }
            else
            {
                  datePicker.DateValidationError -= DatePickerOnDateValidationError;
            }
      }
}

在事件处理中,我们尝试着解析文本,并且设置日期:
private static void DatePickerOnDateValidationError(object sender, DatePickerDateValidationErrorEventArgs e)
{
       var datePicker = sender as DatePicker;
       if (datePicker != null)
       {
             var text = e.Text;
             DateTime dateTime;
             if (DateTime.TryParseExact(text, "yyyyMMdd", CultureInfo.CurrentUICulture, DateTimeStyles.None, out dateTime))
             {
                   datePicker.SelectedDate = dateTime;
             }
       }
}
在Xaml中使用时:
<DatePicker l:DatePickerHelper.EnabledFastInput="True"/>

这样,DatePicker就支持直接输入yyyyMMdd格式的日期了。
当然,这里的日期格式是写死的,可以考虑封装成另外一个DatePickerHelper.InputDateFormat属性之类的,更加灵活

 

【效果图】

 

原文(有源码):http://www.cnblogs.com/RMay/archive/2010/05/27/1745636.html

相关文章
|
C# 前端开发
WPF DatePicker默认显示当前日期,格式化为年月日
原文:WPF DatePicker默认显示当前日期 WPF的日历选择控件默认为当前日期,共有两种方法,一种静态,一种动态。 静态的当然写在DatePicker控件的属性里了,动态的写在对应的cs文件里,具体请看下面。
6541 0
|
C#
WPF技术之DatePicker控件
WPF DatePicker控件用于选择日期。它提供了一个用户友好的界面,使用户能够轻松地从日历中选择日期。
998 0
|
C#
WPF 4.0 DatePicker 快速录入
原文:WPF 4.0 DatePicker 快速录入 WPF 4.0的DatePicker在通过键盘录入日期的时候是非常让人郁闷的。必须按照日期的格式来完整输入例如,比如输入“2010/10/10”才能识别。
807 0
|
C#
WPF 4 日期选择器(DatePicker)
原文:WPF 4 日期选择器(DatePicker)     前一篇《WPF 4 日历控件(Calendar)》 中我们对日历控件的使用方式有了基本了解,本篇将继续介绍WPF 4 中另一个新控件“日期选择器”(DatePicker)。
1703 0
|
C# 数据安全/隐私保护
WPF自定义控件与样式(5)-Calendar/DatePicker日期控件自定义样式及扩展
原文:WPF自定义控件与样式(5)-Calendar/DatePicker日期控件自定义样式及扩展 一.前言   申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接。
1860 0
|
C# 前端开发
WPF DatePicker默认显示当前日期
WPF的日历选择控件默认为当前日期,共有两种方法,一种静态,一种动态。 静态的当然写在DatePicker控件的属性里了,动态的写在对应的cs文件里,具体请看下面。     1.方法一:     myDatePicker.
1372 0
|
7月前
|
C# 开发者 Windows
基于Material Design风格开源、易用、强大的WPF UI控件库
基于Material Design风格开源、易用、强大的WPF UI控件库
398 0
|
7月前
|
C#
浅谈WPF之装饰器实现控件锚点
使用过visio的都知道,在绘制流程图时,当选择或鼠标移动到控件时,都会在控件的四周出现锚点,以便于修改大小,移动位置,或连接线等,那此功能是如何实现的呢?在WPF开发中,想要在控件四周实现锚点,可以通过装饰器来实现,今天通过一个简单的小例子,简述如何在WPF开发中,应用装饰器,仅供学习分享使用,如有不足之处,还请指正。
154 1
|
4月前
|
开发框架 缓存 前端开发
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件