【WPF学习】第二十五章 日期控件

  WPF包含两个日期控件:Calender和DatePicker。这两个控件都被设计为允许用户选择日期。

  Calendar控件显示日期,在与Windows操作系统中看到的日历(例如,当配置系统日期时看到的日历)相似。该控件每次显示一个月份,允许从一个月份跳到另一个月份(通过单击箭头按钮),或跳到某个特定的月份(通过单击月份的标题头查看一年中的月份,然后单击月份)。

  DatePicker控件需要的空间更少。它模范简单的文本框,该文本框以长日期格式或短日期格式保存日期字符串。DatePicker控件提供了一个下拉箭头,当单击时,会弹出完整的日历试图,该试图和Calendar控件显示的试图仙童。这个弹出试图显示在其他任何内容的上面,就像是下拉组合框。

  下图显示了Calendar控件支持的两种显示模式,以及DatePicker支持的两种日期格式。

 

   Calendar和DatePicker控件提供的属性允许你确定显示哪些日期以及哪些日期时可供选择的(以连续的范围提供这些日期)。下表列出了可供使用的属性:

表 Calendar和DatePicker类的属性

 

   日期控件还提供了几个不同事件。最有用的事件是DatePicker控件中的SelectedDateChanged事件,或Calendar控件中类似的SelectedDatesChanged事件,该事件添加了对多个日期选择的支持。可响应这些事件以拒绝特定的日期选择,例如周末的日期:

复制代码
 private void Calendar_SelectedDatesChanged(object sender, SelectionChangedEventArgs e)
        {
            foreach (DateTime selectedDate in e.AddedItems)
            {
                if ((selectedDate.DayOfWeek == DayOfWeek.Saturday) ||
                    (selectedDate.DayOfWeek == DayOfWeek.Sunday))
                {
                    lblError.Text = "Weekends are not allowed";

                    ((Calendar)sender).SelectedDates.Remove(selectedDate);
                }
            }
        }
复制代码

  可使用支持单个或多个日期选择的Calendar事件加以测试。如果支持多个选择,那么尝试在整个星期的日期上拖动鼠标。除不允许的周末日期外,其他所有日期将保持突出显示,而周末日期将被自动取消选择。

  Calendar控件还添加了DisplayDateChanged事件(当用户浏览到新的月份时触发该事件)。DatePicker控件添加了CalendarOpened和CalendarClosed事件(当下拉日历显示和关闭时触发这两个事件),以及DateValidationError事件(当用户在文本输入部分输入不能被解释为合法时间的值时触发该事件)。通常,但用户打开日历试图时会丢弃非法值,但可以选择填充一些文本以通知发生了问题:

private void DatePicker_DateValidationError(object sender, DatePickerDateValidationErrorEventArgs e)
        {
            lblError.Text = "'" + e.Text +
                "' is not a valid value because " + e.Exception.Message;
        }

 

posted @   Peter.Luo  阅读(1684)  评论(2编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示