WPF - 日历



日历是一个控件,允许用户使用可视化日历显示来选择日期。它提供了一些使用鼠标或键盘的基本导航功能。日历类的层次继承如下:

Hierarchical of Calendar

日历类常用属性

序号 属性及说明
1

BlackoutDates

获取标记为不可选择的日期集合。

2

CalendarButtonStyle

获取或设置与控件内部 CalendarButton 对象关联的样式。

3

CalendarDayButtonStyle

获取或设置与控件内部 CalendarDayButton 对象关联的样式。

4

CalendarItemStyle

获取或设置与控件内部 CalendarItem 对象关联的样式。

5

DisplayDate

获取或设置要显示的日期。

6

DisplayDateEnd

获取或设置日历中可用日期范围的最后一天。

7

DisplayDateStart

获取或设置日历中可用的第一天。

8

DisplayMode

获取或设置一个值,该值指示日历显示月份、年份还是十年。

9

FirstDayOfWeek

获取或设置被认为是一周开始的一天。

10

IsTodayHighlighted

获取或设置一个值,该值指示是否突出显示当前日期。

11

SelectedDate

获取或设置当前选定的日期。

12

SelectedDates

获取选定日期的集合。

13

SelectionMode

获取或设置一个值,该值指示允许哪种类型的选择。

日历类常用方法

序号 方法及说明
1

OnApplyTemplate

应用新模板时,构建日历控件的可视化树。(重写 FrameworkElement.OnApplyTemplate().)

2

ToString

提供所选日期的文本表示。(重写 Control.ToString().)

日历类常用事件

序号 事件及说明
1

DisplayDateChanged

当 DisplayDate 属性更改时发生。

2

DisplayModeChanged

当 DisplayMode 属性更改时发生。

3

SelectedDatesChanged

当 SelectedDates 属性返回的集合更改时发生。

4

SelectionModeChanged

当 SelectionMode 更改时发生。

示例

  • 让我们创建一个名为 WPFCalenderControl 的新 WPF 项目。

  • 从工具箱中拖动日历控件,并在属性窗口中更改背景颜色。

  • 现在切换到 XAML 窗口,您将在其中看到日历及其背景的 XAML 标记。

  • 添加更多属性来设置禁止选择的日期和选择事件,如下面的 XAML 代码所示。

<Window x:Class = "WPFCalenderControl.MainWindow" 
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
   xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" 
   xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" 
   xmlns:local = "clr-namespace:WPFCalenderControl" 
   mc:Ignorable = "d" Title = "MainWindow" Height = "350" Width = "604"> 
	
   <Grid> 
      <Calendar Margin = "20" SelectionMode = "MultipleRange"
         IsTodayHighlighted = "false" DisplayDate = "1/1/2015" 
         DisplayDateEnd = "1/31/2015" SelectedDatesChanged = "Calendar_SelectedDatesChanged" 
         xmlns:sys = "clr-namespace:System;assembly = mscorlib"> 
			
         <Calendar.BlackoutDates> 
            <CalendarDateRange Start = "1/2/2015" End = "1/4/2015"/> 
            <CalendarDateRange Start = "1/9/2015" End = "1/9/2015"/> 
            <CalendarDateRange Start = "1/16/2015" End = "1/16/2015"/> 
            <CalendarDateRange Start = "1/23/2015" End = "1/25/2015"/> 
            <CalendarDateRange Start = "1/30/2015" End = "1/30/2015"/> 
         </Calendar.BlackoutDates> 
			
         <Calendar.SelectedDates> 
            <sys:DateTime>1/5/2015</sys:DateTime> 
            <sys:DateTime>1/12/2015</sys:DateTime> 
            <sys:DateTime>1/14/2015</sys:DateTime> 
            <sys:DateTime>1/13/2015</sys:DateTime> 
            <sys:DateTime>1/15/2015</sys:DateTime> 
            <sys:DateTime>1/27/2015</sys:DateTime> 
            <sys:DateTime>4/2/2015</sys:DateTime> 
         </Calendar.SelectedDates> 
			
         <Calendar.Background> 
            <LinearGradientBrush EndPoint = "0.5,1" StartPoint = "0.5,0"> 
               <GradientStop Color = "#FFE4EAF0" Offset = "0" /> 
               <GradientStop Color = "#FFECF0F4" Offset = "0.16" /> 
               <GradientStop Color = "#FFFCFCFD" Offset = "0.16" /> 
               <GradientStop Color = "#FFD80320" Offset = "1" /> 
            </LinearGradientBrush> 
         </Calendar.Background> 
			
      </Calendar>
		
   </Grid> 
	
</Window>

C# 中的选择事件实现如下:

using System; 
using System.Windows;	
using System.Windows.Controls;  

namespace WPFCalenderControl { 
   /// <summary> 
      /// Interaction logic for MainWindow.xaml 
   /// </summary> 
	
   public partial class MainWindow : Window { 
	
      public MainWindow() { 
         InitializeComponent(); 
      }  
		
      private void Calendar_SelectedDatesChanged(object sender, SelectionChangedEventArgs e) { 
         var calendar = sender as Calendar; 
			
         if (calendar.SelectedDate.HasValue) { 
            DateTime date = calendar.SelectedDate.Value; 
            this.Title = date.ToShortDateString(); 
         }  
      } 
		
   } 
}

编译并执行上述代码后,将生成以下窗口,其中显示某些日期被选中,而某些日期被禁用。

Output of Calendar

如果选择另一个日期,它将显示在此窗口的标题中。

Select Date

我们建议您执行上述示例代码并尝试其其他属性和事件。

wpf_controls.htm
广告