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 快速录入,布布扣,bubuko.com

时间: 2024-08-04 10:11:14

WPF 4.0 DatePicker 快速录入的相关文章

BOS项目 第6天(业务受理、自动分单、工作单快速录入、datagrid行编辑)

BOS项目笔记 第6天 今天内容安排: 1.业务受理环节分析 2.创建业务受理环节对应的数据表(业务通知单.工单.工作单) 3.实现业务受理.自动分单 4.datagrid的编辑功能 5.基于datagrid编辑功能实现工作单快速录入功能 6.演示权限控制demo 1. 业务受理分析 受理环节,是宅急送业务的开始,作为服务前端,客户通过电话.网络等多种方式进行委托,业务受理员通过与客户交流,获取客户的服务需求和具体委托信息,将服务指令输入我司服务系统. 客户通过打电话的方式进行物流委托,一个客户

NSIS 2.0界面快速入门

NSIS 2.0 版本支持定制的用户界面.所谓的 Modern UI(下称 MUI) 就是一种模仿最新的 Windows 界面风格的界面系统.MUI 改变了 NSIS 脚本的编写习惯,它使用 NSIS 的宏来表达,指定 MUI 的属性需要使用宏.所以,诸如 LicenseText, Icon, CheckBitmap, InstallColors 在 MUI 中失去意义. MUI 的内置向导页面 和安装程序有关的向导页面 MUI_PAGE_WELCOME 该向导页面显示欢迎信息 MUI_PAGE

Ay.Framework.WPF 2.0建立项目到底有多快

2015-3-31 今天我已经优化了很多地方,让客户使用起来几乎是傻瓜式使用了,废话不多说,我们开始吧. 默认的我提供了一些图片,但是也只占用了8M多,2.0版本目前总共有45M左右大小,毕竟包含了fontawesome字体包,还有cefsharp 如上图,Ay.Framework.WPF.dll也只有935K大小,还是比较小的 ①新建WPF应用程序项目 接着拷贝Ay.Framework.WPF.2.0.zip到项目中,并解压 添加引用,并设置x64位平台 配置可以换成Release,这里随便你

.Net Core 3.0 IdentityServer4 快速入门

原文:.Net Core 3.0 IdentityServer4 快速入门 .Net Core 3.0 IdentityServer4 快速入门 一.简介 IdentityServer4是用于ASP.NET Core的OpenID Connect和OAuth 2.0框架. 将IdentityServer4部署到您的应用中具备如下特点: 1).认证服务 2).单点登陆 3).API访问控制 4).联合网关 5).专注于定制 6).成熟的开源系统 7).免费和商业支持 二.整体部署 目前大多数的应用

.Net Core 3.0 IdentityServer4 快速入门02

.Net Core 3.0 IdentityServer4 快速入门 —— resource owner password credentials(密码模式) 一.前言 OAuth2.0默认有四种授权模式(GrantType): 1)授权码模式 2)简化模式 3)密码模式(resource owner password credentials) 4)客户端模式(client_credentials) 上一小节接受了 客户端模式 ,本小节将介绍 密码模式,OAuth2.0资源所有者密码授权功能允许

Excel的快速录入

数据有效性: 1.选择要限制数据有效性的区域: 2.点开[数据]选项卡选择"数据验证": 3.[设置]中选择"序列": 4.若手动输入则需要将内容使用英文符号分割开来(比如:A级,B级): 5.若嫌手动麻烦就使用右侧选择有效数据: 快速填写Excel中的内容 Alt+↑ 可以快速调用出钱面录入过得内容: 批量录入 1.经常输入带有小数点的数据 可以在[文件].[选项].[高级]中找到"自动插入小数点"小数点位数选择2,输入数据就会自动缩小一百倍

Chapter 0.SymmetricDS快速入门指南( Quick Start Guide)

本文档是SymmetricDS3.6.14文档的第一章节Quick Start Guide文档的翻译,的目的是帮助读者快速搭建一个SymmetricDS集群并普及一些基本概念术语. 本文档描述了如何在两个SymmetricDS节点之间同步两个相同schema的数据库.下面的例子构建了一个分销业务模型,有一个中央数据库(我们叫它root或者corp节点)和多个零售商店的数据库(我们叫它client或者store节点).对于本教程,我们将只有一个store(商店)节点,如下图.如果你愿意,可以再教程

035 工作单快速录入 - bos

一.前台代码理解及修改 1.新增行也可完成提交原来编辑的行功能(如果有在编辑的行) //全局变量 var editIndex; function doAdd() { if (editIndex != undefined) { //表示有一行正在编辑,先结束编辑的行(会触发onAfterEdit) $("#grid").datagrid('endEdit', editIndex); } //没有行在编辑状态才能进行新增 if (editIndex == undefined) { //al

Debian 8.2.0 (jessie) 快速纯净安装教程

这篇文章我会尽可能详细地说明如何快速安装纯净的Debian 8.2.0,需要懂一点vi编辑器的使用方法. 如果是新手没用过vi编辑器也不用担心,我会尽量详细地说明使用方法的. 首先在Debian官网上下载网络安装CD或者完整DVD镜像,DVD镜像只需DVD-1即可. 下载好镜像后做成U盘启动盘,从U盘启动开机. 在引导界面选择Graphical install(图形化安装),进入安装过程. 选择语言界面,选择中文吧,也不要求用鸟语了,看着都累. 提示虽然是好心,但是安装过程中我就见到一处乱码还就