WPF 4.0 DatePicker 快速录入
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
WPF 4.0 DatePicker 快速录入的更多相关文章
- 在Winform开发框架中,利用DevExpress控件实现数据的快速录入和选择
在实际的项目开发过程中,有好的控件或者功能模块,我都是想办法尽可能集成到我的WInform开发框架中,这样后面开发项目起来,就可以节省很多研究时间,并能重复使用,非常高效方便.在我很早之前的一篇博客& ...
- 在WPF的DATAGRID中快速点击出现在ADDNEW或EDITITEM事务过程不允许DEFERREFRESH
原文 在WPF的DATAGRID中快速点击出现在ADDNEW或EDITITEM事务过程不允许DEFERREFRESH 在项目中关于DataGrid的遇到过一些问题,其中是关于迁入CheckBox的双向 ...
- JAVAEE——BOS物流项目09:业务受理需求分析、创建表、实现自动分单、数据表格编辑功能使用方法和工作单快速录入
1 学习计划 1.业务受理需求分析 n 业务通知单 n 工单 n 工作单 2.创建业务受理环节的数据表 n 业务通知单 n 工单 n 工作单 3.实现业务受理自动分单 n 在CRM服务端扩展方法根据手 ...
- 运单waybill快速录入
运单waybill快速录入 前台页面: 1修改页面onAfterEdit事件, 后台代码:ajax响应回请求1 为成功,0 为失败
- 项目一:第十一天 2、运单waybill快速录入 3、权限demo演示-了解 5、权限模块数据模型 6、基于shiro实现用户认证-登录(重点)
1. easyui DataGrid行编辑功能 2. 运单waybill快速录入 3. 权限demo演示-了解 4. Apache shiro安全框架概述 5. 权限模块数据模型 6. 基于shiro ...
- ComfortTypingPro快速录入工具
1.简介 Comfort Typing Pro 官方中文注册版是一款非常方便的键盘快速录入辅助工具, 也可以叫做键盘宏工具吧. 程序的主要功能是可以帮助你快速的输入大量需要重复输入的内容, 支持文本和 ...
- Ay.Framework.WPF 2.0建立项目到底有多快
2015-3-31 今天我已经优化了很多地方,让客户使用起来几乎是傻瓜式使用了,废话不多说,我们开始吧. 默认的我提供了一些图片,但是也只占用了8M多,2.0版本目前总共有45M左右大小,毕竟包含了f ...
- Spring Boot 2.0 的快速入门(图文教程)
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! Spring Boot 2.0 的快速入门(图文教程) 大家都 ...
- 个人永久性免费-Excel催化剂功能第72波-序列规则下的数据验证有效性好帮手:快速录入窗体辅助录入
Excel作为最好用的数据录入工具,没有之一,如果能够充分利用好Excel的灵活性和规范性,将带来极大的生产力提升,前面的几波功能也有做了几大数据录入的辅助功能,今天再次给大家带来一个特定的使用场景, ...
随机推荐
- Swift 二维码扫描 简单实现
3.30看视频 学到了二维码简单的实现 还有一些动画的实现 今天就先记录一下二维码扫描的简单实现 不太好记手写一遍 学习的基础在于模仿嘛 创建一个实现二维码扫描的步骤 1.首先是懒加载创建 会话 ...
- Log4jConfigListener cannot be found — context fails to start
解决方案 Reticulogic's second suggestion is correct. However, in Eclipse Helios, the "Java EE Modul ...
- 使用 AngularJS 开发一个大规模的单页应用(SPA)
本文的目标是基于单页面应用程序开发出拥有数百页的内容,包括认证,授权,会话状态等功能,可以支持上千个用户的企业级应用. 下载源代码 介绍 (SPA)这样一个名字里面蕴含着什么呢? 如果你是经典的S ...
- xxx is not in the sudoers file.This incident will be reported.的解决方法 (一般用户不能执行sudo)
1.切换到root用户下 2.添加sudo文件的写权限,命令是:chmod u+w /etc/sudoers 3.编辑sudoers文件vi /etc/sudoers找到这行 root ALL=(AL ...
- Cross-Origin Resource Sharing协议介绍
传统的Ajax请求只能获取在同一个域名下面的资源,但是HTML5打破了这个限制,允许Ajax发起跨域的请求.浏览器是可以发起跨域请求的,比如你可以外链一个外域的图片或者脚本.但是Javascript脚 ...
- JavaScript Patterns 6.2 Expected Outcome When Using Classical Inheritance
// the parent constructor function Parent(name) { this.name = name || 'Adam'; } // adding functional ...
- mysql访问连接过多
今天开发中启动服务器,发现不管怎么样都会报连接池已满,随后删除数据库中的连接,发现可以启动,后来关闭后重新启动又出现连接池已满的错误.后监控数据库发现,当我关闭服务的时候,数据库的连接并没有关闭,随后 ...
- javascript-简单工厂两种实现方式
简单工厂笔记 两种方式: 第一种:通过实例化对象创建 第二种:通过创建一个新对象然后包装增强其属性和功能来实现 差异性:前一种通过类创建的 对象,如果这些类继承同一个父类,他们父类原型上的方法是可以共 ...
- hadoop2.4.1集群搭建
准备Linux环境 修改主机名: $ vim /etc/sysconfig/network NETWORKING=yes HOSTNAME=hadoop001 修改IP: # vim /etc/sys ...
- 【shell--批量远程MySQL,执行命令】-【工作总结】
昨天下班前,老板给了一批LOG数据库IP地址,需要统计LOG表里Message字段top 10的结果,并输出到一个excel文件里.抽查看了下,有两种格式的以当天日期结尾的表名.由于数量太多,时间紧迫 ...