日历控件用于创建可视日历,让用户选择日期并在选择日期时触发事件。本文演示如何使用 XAML 和 C# 在 WPF 中创建和使用日历控件。

创建日历

Calendar 元素表示 XAML 中的 WPF 日历控件。

<Calendar/> 

Calendar 控件在 System.Windows.Controls 命名空间中定义。当您将日历控件从工具箱拖放到页面时,XAML 代码将类似于以下代码,您可以在其中看到日历 XAML 元素已添加到 Grid 元素中,并且其 Width、Height、Name 和 VerticalAlignment 和 Horizo​​ntalAlignment 属性是放。

<Grid>  <Calendar Height="170" HorizontalAlignment="Left" Margin="58,32,0,0"  Name="calendar1" VerticalAlignment="Top" Width="180" />
</Grid>  

Calendar控件的默认视图如图所示。

Calendar元素的Width和Height属性表示Calendar的宽度和高度。Content属性表示Calendar的文本。Name属性表示控件的名称,它是控件的唯一标识符。
清单1中的代码片段创建了一个Calendar控件,并设置了Calendar控件的名称、高度和宽度属性。

<Calendar Name=" MonthlyCalendar" Height="30" Width="100">
</Calendar>  

显示模式
Calendar类的DisplayMode属性表示Calendar的显示格式,可以是月、年或年。默认模式为“月”。将DisplayMode设置为Year和Decade。

Month视图也是默认视图。

如果您以Decade为例,单击图3中的2008年,您将得到另一种日历格式,其中包含2008年的所有月份,如果您单击任何一个月份,最终将得到日历的月份视图。
下面的代码段将DisplayMode属性设置为Decade。

<Calendar DisplayMode="Decade">
</Calendar>  

选择方式和选择日期
SelectedDate属性表示当前选中的日期。如果多个日期选择为真,则SelectedDates属性表示当前选定日期的集合。
类型CalendarSelectionMode枚举的SelectionMode表示日历的选择模式。表1描述了CalendarSelectionMode枚举及其成员。

日历选择模式 描述
None 不允许选择。
SingleDate 通过设置 SelectedDate 或 SelectedDates 中的第一个值,只能选择一个日期。不能使用 AddRange。
SingleRange 可以选择单个日期范围。设置 SelectedDate、将日期单独添加到 SelectedDates 或使用 AddRange 将清除 SelectedDates 中的所有先前值。
MultipleRange 可以选择多个不连续的日期范围。将日期单独添加到 SelectedDates 或使用 AddRange 不会清除 SelectedDates。设置 SelectedDate 仍将清除 SelectedDates,但可以添加其他日期或范围。添加包含一些已选择日期或与另一个范围重叠的日期的范围会导致这些范围的并集,并且不会导致异常。

以下代码片段将 SelectionMode 属性设置为单个范围。

<Calendar SelectionMode="SingleRange">
</Calendar> 

BlackoutDates

Calendar类的BlackoutDates属性表示不可用于选择的日期集合。所有非选择日期都用叉号标记。例如,假设在2010年的3月,我们想要阻止日期从1月1日到1月8日,然后所有的星期一。最终的日历应该如图所示。

下面的代码片段将回退日期添加到日历中。

<Calendar.BlackoutDates>  <CalendarDateRange Start="3/1/2010" End="3/7/2010" />  <CalendarDateRange Start="3/8/2010" End="3/8/2010" />  <CalendarDateRange Start="3/15/2010" End="3/15/2010" />  <CalendarDateRange Start="3/22/2010" End="3/22/2010" />  <CalendarDateRange Start="3/29/2010" End="3/29/2010" />
</Calendar.BlackoutDates> 

BlackoutDates。Add方法接受一个CalendarDateRange对象,该对象是两个DateTime对象的集合。第一个日期是日期范围的开始日期,第二个日期是日期范围的结束日期。

private void SetBlackOutDates() {  MonthlyCalendar.BlackoutDates.Add(new CalendarDateRange(new DateTime(2010, 3, 1), new DateTime(2010, 3, 7)));  MonthlyCalendar.BlackoutDates.Add(new CalendarDateRange(new DateTime(2010, 3, 8), new DateTime(2010, 3, 8)));  MonthlyCalendar.BlackoutDates.Add(new CalendarDateRange(new DateTime(2010, 3, 15), new DateTime(2010, 3, 15)));  MonthlyCalendar.BlackoutDates.Add(new CalendarDateRange(new DateTime(2010, 3, 22), new DateTime(2010, 3, 22)));  MonthlyCalendar.BlackoutDates.Add(new CalendarDateRange(new DateTime(2010, 3, 29), new DateTime(2010, 3, 29)));
}  

DisplayDateStart和DisplayDateEnd

日历控件允许您通过使用DisplayDateStart和DisplayDateEnd属性来设置开始和结束显示日期。如果您看到前一节中的图5,您可能会注意到2010年3月日历显示从2010年3月01日开始。但是现在如果你想只显示2010年3月的日期呢?我们可以使用DisplayStartDate和DisplayEndDate属性来控制一个月的开始日期和结束日期。
DisplayDate属性表示要显示的当前日期。
下面的代码段设置DisplayDate、DisplayDateStart和DisplayDateEnd属性

<Calendar Name="MonthlyCalendar"  SelectionMode="MultipleRange"   DisplayDate="3/1/2010"  DisplayDateStart="3/1/2010"  DisplayDateEnd="3/31/2010"
/>   

代码确保开始日期为2010年3月01日,结束日期为2010年3月31日。当前选定日期为3月05日。

private void SetDisplayDates()
{  MonthlyCalendar.DisplayDate = new DateTime(2010, 3, 5);  MonthlyCalendar.DisplayDateStart = new DateTime(2010, 3, 1);  MonthlyCalendar.DisplayDateEnd = new DateTime(2010, 3, 31);
}  

新的日历如图所示。

FirstDayOfWeek和IsTodayHighlighted
默认情况下,周日是一周的第一天。如果你想改变它,你可以使用FirstDayOfWeek属性。istodayhighlight属性用于突出显示今天。
下面的代码片段将FirstDayOfWeek设置为周二,并突出显示今天。

<Calendar Name="MonthlyCalendar"  SelectionMode="MultipleRange"  DisplayDate="3/5/2010"  DisplayDateStart="3/1/2010"  DisplayDateEnd="3/31/2010"  FirstDayOfWeek="Tuesday"  IsTodayHighlighted="True"
xmlns:sys="clr-namespace:System;assembly=mscorlib" Margin="15,39,88,19">

下面的代码片段将FirstDayOfWeek设置为周二,并在WPF中突出显示今天。

MonthlyCalendar.FirstDayOfWeek = DayOfWeek.Tuesday;
MonthlyCalendar.IsTodayHighlighted = true;  

新的日历如图7所示,在图中可以看到一周的开始一天Tuesday。

Selected Date and Selected Dates

SelectedDate属性表示当前选中的日期。如果多个日期选择为true,则SelectedDates属性表示Calendar中所有选定的日期。下面的代码片段在设计时设置XAML中的SelectedDates。

<Calendar Name="MonthlyCalendar" SelectionMode="MultipleRange" DisplayDate="3/5/2010" DisplayDateStart="3/1/2010" DisplayDateEnd="3/31/2010" FirstDayOfWeek="Tuesday" IsTodayHighlighted="True" xmlns:sys="clr-namespace:System;assembly=mscorlib" Margin="15,39,88,19">  <Calendar.SelectedDates>  <sys:DateTime>3/5/2010</sys:DateTime>  <sys:DateTime>3/15/2010</sys:DateTime>  <sys:DateTime>3/25/2010</sys:DateTime>  </Calendar.SelectedDates>
</Calendar>  

格式化日历

我们如何创建一个带有日历的边框格式、背景和前景的日历控件?

Calendar 的 BorderBrush 属性设置画笔来绘制日历的边框。您可以使用任何画笔来填充边框。下面的代码片段使用线性渐变画笔来绘制红色和蓝色组合的边框。

<Calendar.BorderBrush>  <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">  <GradientStop Color="Blue" Offset="0" />  <GradientStop Color="Red" Offset="1.0" />  </LinearGradientBrush>
</Calendar.BorderBrush>  

日历的背景和前景属性设置日历的背景和前景颜色。你可以使用任何笔刷填充边界。下面的代码片段使用线性渐变笔刷绘制日历的背景和前景。

<Calendar.Background>  <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">  <GradientStop Color="Blue" Offset="0.1" />  <GradientStop Color="Orange" Offset="0.25" />  <GradientStop Color="Green" Offset="0.75" />  <GradientStop Color="Red" Offset="1.0" />  </LinearGradientBrush>
</Calendar.Background>
<Calendar.Foreground>  <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">  <GradientStop Color="Black" Offset="0.25" />  <GradientStop Color="Green" Offset="1.0" />  </LinearGradientBrush>
</Calendar.Foreground>  

设置图片为日历的背景
要设置一个图片作为日历的背景,我们可以设置一个图片作为日历的背景。下面的代码片段将Calendar的背景设置为图像。代码还设置图像的不透明度。

<Calendar.Background>  <ImageBrush ImageSource="Garden.jpg" Opacity="0.3"/>
</Calendar.Background>  

浅谈WPF中的Calendar日历控件相关推荐

  1. WPF Calendar 日历控件 样式自定义

    原文:WPF Calendar 日历控件 样式自定义 粗略的在代码上做了些注释 blend 生成出来的模版 有的时候 会生成 跟 vs ui界面不兼容的代码 会导致可视化设计界面 报错崩溃掉 但是确不 ...

  2. WindowsXamlHost:在 WPF 中使用 UWP 的控件(Windows Community Toolkit)

    原文 WindowsXamlHost:在 WPF 中使用 UWP 的控件(Windows Community Toolkit) Windows Community Toolkit 再次更新到 5.0. ...

  3. excel日历弄到html,Excel中进行添加日历控件的两种方法

    有时我们在运用Excel表格的时候会运用到日历的控件,可是小伙伴们却不知道在哪里添加.那么我们来看一下,它到底躲藏在哪里,又该怎么添加呢?今天,学习啦小编就教大家在Excel中进行添加日历控件的两种方 ...

  4. IE11浏览器中的My97日历控件刷新后无法打开问题解决办法

    IE11浏览器中的My97日历控件刷新后无法打开问题解决办法:(谷歌浏览器下正常.IE11失效) 解决办法: 1:找到WdatePicker.js 2:将$crossFrame:true 改为$cro ...

  5. 肝一个嵌入式日历吧!LVGL『Calendar日历控件』介绍

    一. LVGL GUI日历控件的概念 LVGL做的日历空间还是比较好看的,而且需要我们做的事情很少,LVGL的日历控件有以下功能 突出显示当天 突出显示任何用户定义的日期 显示日期名称 单击按钮进入下 ...

  6. element-ui calendar 日历控件实现编辑假期功能以及样式修改

    效果图: 1.日历控件html <template><div class="la-container"><la-pagetitle title=&qu ...

  7. 【小沐学C#】WPF中嵌入web网页控件(WebBrowser、WebView2、CefSharp)

    文章目录 1.简介 1.1 WPF简介 1.2 WPF 体系结构 1.3 WPF入门开发 2.WebBrowser 2.1 WebBrowser特点 2.2 WebBrowser常用的属性.方法和事件 ...

  8. WPF 中如何使用第三方控件 ,可以使用WindowsFormsHost 类

    允许在 WPF 页面上承载 Windows Forms控件的元素. 命名空间:   System.Windows.Forms.Integration 程序集:   WindowsFormsIntegr ...

  9. VS编程,WPF中,通过telerik控件创建颜色选择器,颜色拾取器,调色板的一种方法

     这里展示使用telerik控件时,调用颜色调色板,颜色选择器,颜色拾取器的一种方法 1.增加引用 2.前台定义引用 xmlns:telerik="http://schemas.teleri ...

  10. 也许有用(也谈VC中ModifyStyleModifyStyleEx无法改变控件的Style)

     一个View中用到了一个CListCtrl,在OnInitialUpdate函数里面他调用了m_listCtrl.ModifyStyleEx(0, LVS_EX_FULLROWSELECT);但是结 ...

最新文章

  1. 破解.NET 2.0配置之谜(一)
  2. oracle10G导入导出数据文件
  3. python输入exit怎么退出了_Python 中的 exit() 和 sys.exit()
  4. UA MATH636 信息论8 线性纠错码
  5. 在java 里kv 是什么_consul kv使用介绍
  6. LeetCode 204. Count Primes
  7. 搞定网页打印自动分页问题
  8. python-数字数据类型-整数类型-浮点数类型-数据类型间的转换
  9. FR-TO-FR本地交换
  10. linux 通配符与正则表达式
  11. 简单的HTML5灰度图查看器 simple PACS DICOM HTML5 viewer
  12. 【优化求解】基于NSGA2算法求解多目标优化问题matlab代码
  13. Silverlight 2.“.NET研究”5D RPG游戏技巧与特效处理:(二)纸娃娃系统
  14. matlab中plot3,mesh,grid三者画图的区别
  15. 小擦呀,这省市三级联动的数据不太准确,找份最新的吧
  16. SAP 信息记录条件 无法维护多个条件
  17. 永远不要使用 Boolean 对象
  18. python+matplotlib绘图线条类型、颜色、散点类型
  19. python项目开发案例集锦 豆瓣-Python 的练手项目有哪些值得推荐?
  20. 手把手带你开发一个批量下载资源的谷歌浏览器扩展

热门文章

  1. 求ReportMachine的OCX教程
  2. 射频识别技术漫谈(17)——射频卡中数据的存储形式
  3. WWF全球河流数据HydroRIVERS
  4. Lemon OA_Lemon OA(开源OA系统)
  5. 社会化媒体驱动营销转型
  6. 在虚拟机、Mac 电脑和旧电脑上绕过 TPM 安装 Windows 11 的方法总结(提供通用无 TPM 检测镜像下载)
  7. html速成按钮样式,前端技巧集:从零制作华丽的按钮CSS样式
  8. iOS经典讲解之Apple Pay开发
  9. 如何选择erp进销存订单管理软件?
  10. Cocos技术派 | TS版属性声明详解