System.Windows.Controls Nam ...


.NET Framework Class Library for Silverlight
Calendar Class

Represents a control that enables a user to select a date by using a visual calendar display.

Namespace:  System.Windows.Controls
Assembly:  System.Windows.Controls (in System.Windows.Controls.dll)
Syntax

Visual Basic (Declaration)
<TemplateVisualStateAttribute(Name := "InvalidUnfocused", GroupName := "ValidationStates")> _
<TemplatePartAttribute(Name := "Root", Type := GetType(Panel))> _
<TemplatePartAttribute(Name := "CalendarItem", Type := GetType(CalendarItem))> _
<StyleTypedPropertyAttribute(Property := "CalendarItemStyle", StyleTargetType := GetType(CalendarItem))> _
<TemplateVisualStateAttribute(Name := "InvalidFocused", GroupName := "ValidationStates")> _
<StyleTypedPropertyAttribute(Property := "CalendarButtonStyle", StyleTargetType := GetType(CalendarButton))> _
<TemplateVisualStateAttribute(Name := "Valid", GroupName := "ValidationStates")> _
<StyleTypedPropertyAttribute(Property := "CalendarDayButtonStyle", StyleTargetType := GetType(CalendarDayButton))> _
Public Class Calendar _
    Inherits Control
Visual Basic (Usage)
Dim instance As Calendar
C#
[TemplateVisualStateAttribute(Name = "InvalidUnfocused", GroupName = "ValidationStates")]
[TemplatePartAttribute(Name = "Root", Type = typeof(Panel))]
[TemplatePartAttribute(Name = "CalendarItem", Type = typeof(CalendarItem))]
[StyleTypedPropertyAttribute(Property = "CalendarItemStyle", StyleTargetType = typeof(CalendarItem))]
[TemplateVisualStateAttribute(Name = "InvalidFocused", GroupName = "ValidationStates")]
[StyleTypedPropertyAttribute(Property = "CalendarButtonStyle", StyleTargetType = typeof(CalendarButton))]
[TemplateVisualStateAttribute(Name = "Valid", GroupName = "ValidationStates")]
[StyleTypedPropertyAttribute(Property = "CalendarDayButtonStyle", StyleTargetType = typeof(CalendarDayButton))]
public class Calendar : Control
XAML Object Element Usage
<controls:Calendar .../>

XAML Values

controls:

A prefix that is defined to map the XML namespace for the System.Windows.Controls assembly and the System.Windows.Controls CLR namespace.

Remarks

A Calendar control can be used on its own, or as a drop-down part of a DatePicker control. For more information, see DatePicker.

A Calendar displays either the days of a month, the months of a year, or the years of a decade, depending on the value of the DisplayMode property. When displaying the days of a month, the user can select a date, a range of dates, or multiple ranges of dates. The kinds of selections that are allowed are controlled by the SelectionMode property.

The range of dates displayed is governed by the DisplayDateStart and DisplayDateEnd properties. If DisplayMode is Year or Decade, only months or years that contain displayable dates will be displayed. Setting the displayable range to a range that does not include the current DisplayDate will throw an ArgumentOutOfRangeException.

The BlackoutDates property can be used to specify dates that cannot be selected. These dates will be displayed as dimmed and disabled.

By default, Today is highlighted. This can be disabled by setting IsTodayHighlighted to false.

The Calendar control provides basic navigation using either the mouse or keyboard. The following table summarizes keyboard navigation.

Key Combination

DisplayMode

Action

ARROW

Any

Change focused date, unselect all selected dates, and select new focused date.

SHIFT+ARROW

Any

If SelectionMode is not set to SingleDate or None begin selecting a range of dates.

CTRL+UP ARROW

Any

Switch to the next larger DisplayMode. If DisplayMode is already Decade, no action.

CTRL+DOWN ARROW

Any

Switch to the next smaller DisplayMode. If DisplayMode is already Month, no action.

SPACEBAR

Month

Select focused date.

SPACEBAR

Year or Decade

Switch DisplayMode to the Month or Year represented by focused item.

NoteNote:

The Calendar control is available as part of the libraries in the Silverlight Software Development Kit (SDK). For more information, see the Silverlight Tools.

Customizing the Calendar Control

To apply the same property settings to multiple Calendar controls, use the Style property. To change the visual structure and visual behavior of a Calendar, copy and modify its default style and template. For more information, see Control Customization.

If a dependency property for a Calendar is set by its default style, the property might change from its default value when the Calendar appears in the application. For more information, see Dependency Property Value Precedence. You can get the default style and template for Calendar from Calendar Styles and Templates.

NoteNote:

Setting a visual property will only have an effect if that property is both present in Calendar control's default template and is set by using a TemplateBinding. You can find a list of visual properties in the "Changing the Visual Structure of a Control" section of Customizing the Appearance of an Existing Control by Using a ControlTemplate.

Examples

The following code and XAML creates a page with two Calendar controls and two DatePicker controls. The Calendar and DatePicker controls are configured in a variety of ways.

Run this sample

Visual Basic
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Documents
Imports System.Windows.Input
Imports System.Windows.Media
Imports System.Windows.Media.Animation
Imports System.Windows.Shapes

Partial Public Class Page
    Inherits UserControl
    Public Sub New()
        InitializeComponent()

        ' Sets a Calendar to display a range of dates from 1/10/2009 to 
        ' 4/18/2009. 2/15/2009 is selected, but 3/2009 is initially 
        ' displayed. 
        cal.SelectedDate = New DateTime(2009, 2, 15)
        cal.DisplayDate = New DateTime(2009, 3, 15)

        ' if DisplayDate is not set, the Calendar displays 
        ' the SelectedDate. 
        cal.DisplayDateStart = New DateTime(2009, 1, 10)
        cal.DisplayDateEnd = New DateTime(2009, 4, 18)

        'Sets a Calendar to allow multiple selections, and configures 
        'some dates to be unselectable. 
        cal3.SelectionMode = CalendarSelectionMode.MultipleRange
        cal3.DisplayDate = New DateTime(2009, 1, 1)
        cal3.DisplayDateStart = New DateTime(2009, 1, 1)
        cal3.DisplayDateEnd = New DateTime(2009, 1, 31)
        cal3.BlackoutDates.Add(New CalendarDateRange(New DateTime(2009, 1, 2), New DateTime(2009, 1, 4)))
        cal3.BlackoutDates.Add(New CalendarDateRange(New DateTime(2009, 1, 9)))
        cal3.BlackoutDates.Add(New CalendarDateRange(New DateTime(2009, 1, 16)))
        cal3.BlackoutDates.Add(New CalendarDateRange(New DateTime(2009, 1, 23), New DateTime(2009, 1, 25)))
        cal3.BlackoutDates.Add(New CalendarDateRange(New DateTime(2009, 1, 30)))

        cal3.SelectedDates.Add(New DateTime(2009, 1, 5))
        cal3.SelectedDates.AddRange(New DateTime(2009, 1, 12), New DateTime(2009, 1, 15))
        cal3.SelectedDates.Add(New DateTime(2009, 1, 27))
    End Sub


    'Simple event handlers that updates a TextBlock when 
    'the drop-down calendar is opened or closed. 
    Private Sub dp1_CalendarOpened(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles dp1.CalendarOpened
        text1.Text = "DatePicker Calendar opened!"
    End Sub

    Private Sub dp1_CalendarClosed(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles dp1.CalendarClosed
        text1.Text = "DatePicker Calendar closed!"
    End Sub

    'Updates a TextBlock with information from the SelectedDateChanged event. 
    Private Sub dp2_SelectedDateChanged(ByVal sender As Object, ByVal e As SelectionChangedEventArgs) Handles dp2.SelectedDateChanged
        'RemovedItems will be null if this is the first time a date was selected. 
        If e.RemovedItems Is Nothing OrElse e.RemovedItems.Count = 0 Then
            text1.Text = "Changed SelectedDate from nothing to " + e.AddedItems(0) + "!"
        Else
            text1.Text = "Changed SelectedDate from " + e.RemovedItems(0) + " to " + e.AddedItems(0) + "!"
        End If
    End Sub

    'Updates a TextBlock with information from the DisplayDateChanged event. 
    'This will happen every time the visible month changes, whether triggered 
    'by user input or by code. 
    Private Sub cal_DisplayDateChanged(ByVal sender As Object, ByVal e As CalendarDateChangedEventArgs) Handles cal.DisplayDateChanged
        'This should never occur unless DisplayDate is explicitly set to nothing. 
        If e.RemovedDate Is Nothing Then
            text1.Text = "Changed DisplayDate from nothing to " + e.AddedDate + "!"
        Else
            text1.Text = "Changed DisplayDate from " + e.RemovedDate + " to " + e.AddedDate + "!"
        End If
    End Sub
End Class
C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace CalendarExample
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();

            //Sets a Calendar to display a range of dates from 1/10/2009 to 
            //4/18/2009.  2/15/2009 is selected, but 3/2009 is initially 
            //displayed.
            cal.SelectedDate = new DateTime(2009, 2, 15);
            cal.DisplayDate = new DateTime(2009, 3, 15); //if DisplayDate is not set, the Calendar displays
            //the SelectedDate.
            cal.DisplayDateStart = new DateTime(2009, 1, 10);
            cal.DisplayDateEnd = new DateTime(2009, 4, 18);

            //Sets a Calendar to allow multiple selections, and configures
            //some dates to be unselectable.
            cal3.SelectionMode = CalendarSelectionMode.MultipleRange;
            cal3.DisplayDate = new DateTime(2009, 1, 1);
            cal3.DisplayDateStart = new DateTime(2009, 1, 1);
            cal3.DisplayDateEnd = new DateTime(2009, 1, 31);
            cal3.BlackoutDates.Add(new CalendarDateRange(new DateTime(2009, 1, 2), new DateTime(2009, 1, 4)));
            cal3.BlackoutDates.Add(new CalendarDateRange(new DateTime(2009, 1, 9)));
            cal3.BlackoutDates.Add(new CalendarDateRange(new DateTime(2009, 1, 16)));
            cal3.BlackoutDates.Add(new CalendarDateRange(new DateTime(2009, 1, 23), new DateTime(2009, 1, 25)));
            cal3.BlackoutDates.Add(new CalendarDateRange(new DateTime(2009, 1, 30)));

            cal3.SelectedDates.Add(new DateTime(2009, 1, 5));
            cal3.SelectedDates.AddRange(new DateTime(2009, 1, 12), new DateTime(2009, 1, 15));
            cal3.SelectedDates.Add(new DateTime(2009, 1, 27));

            //Hook up events to event handlers.
            dp1.CalendarOpened += new RoutedEventHandler(dp1_CalendarOpened);
            dp1.CalendarClosed += new RoutedEventHandler(dp1_CalendarClosed);

            dp2.SelectedDateChanged += new EventHandler<SelectionChangedEventArgs>(dp2_SelectedDateChanged);
            cal2.DisplayDateChanged += new EventHandler<CalendarDateChangedEventArgs>(cal_DisplayDateChanged);
        }


        //Simple event handlers that updates a TextBlock when 
        //the drop-down calendar is opened or closed.
        void dp1_CalendarOpened(object sender, RoutedEventArgs e)
        {
            text1.Text = "DatePicker Calendar opened!";
        }
        void dp1_CalendarClosed(object sender, RoutedEventArgs e)
        {
            text1.Text = "DatePicker Calendar closed!";
        }

        //Updates a TextBlock with information from the SelectedDateChanged event.
        void dp2_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
        {
            //RemovedItems will be null if this is the first time a date was selected.
            if (e.RemovedItems == null || e.RemovedItems.Count == 0)
            {
                text1.Text = "Changed SelectedDate from null to " + e.AddedItems[0] + "!";
            }
            else
            {
                text1.Text = "Changed SelectedDate from " + e.RemovedItems[0] + " to " + e.AddedItems[0] + "!";
            }
        }

        //Updates a TextBlock with information from the DisplayDateChanged event.
        //This will happen every time the visible month changes, whether triggered
        //by user input or by code.
        void cal_DisplayDateChanged(object sender, CalendarDateChangedEventArgs e)
        {
            //This should never occur unless DisplayDate is explicitly set to null.
            if (e.RemovedDate == null)
            {
                text1.Text = "Changed DisplayDate from null to " + e.AddedDate + "!";
            }
            else
            {
                text1.Text = "Changed DisplayDate from " + e.RemovedDate + " to " + e.AddedDate + "!";
            }
        }
    }
}
XAML
<UserControl  xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" x:Class="CalendarExample.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    FontFamily="Trebuchet MS" FontSize="11"
    Width="600" Height="750">
    <StackPanel x:Name="LayoutRoot" Background="White">
        <StackPanel Orientation="Horizontal" Margin="5" >
        <!-- A basic Calendar. -->
        <TextBlock  Width="100" 
                   Text="Calendar with date ranges defined:" TextWrapping="Wrap" Margin="5" />
        <controls:Calendar x:Name="cal" />

        <!-- A Calendar does not highlight today's date. -->
            <TextBlock  Width="100" 
                   Text="Calendar that does not highlight today's date:" TextWrapping="Wrap" Margin="5"/>
            <controls:Calendar x:Name="cal2" Canvas.Left="270" Canvas.Top="100" 
                        IsTodayHighlighted="false" />
        </StackPanel>
        <!-- Two DatePicker controls, one using the default Short date format -->
        <!-- and the other using the Long date format. -->
        <StackPanel Orientation="Horizontal" >
        <TextBlock Width="200" Margin="5" 
                   Text="DatePicker with Short date format and Calendar event handlers:" TextWrapping="Wrap" />
        <controls:DatePicker x:Name="dp1" Height="20" Width="200" />
        </StackPanel>
        <StackPanel Orientation="Horizontal" >
        <TextBlock Width="200" Margin="5"
                   Text="DatePicker with Long date format and DateSelected event handler:" TextWrapping="Wrap" />
        <controls:DatePicker Height="20" x:Name="dp2" SelectedDateFormat="Long" Width="200"/>
        </StackPanel>
        <!-- Output TextBlock -->
        <TextBlock x:Name="text1" HorizontalAlignment="Left" Height="40" Width="350" Margin="5" />

        <!-- A Calendar to demonstrate multiple selection. -->
        <StackPanel Orientation="Horizontal" >
        <TextBlock  Width="200" Margin="5"
                   Text="Calendar with multiple selections and blackout dates:" TextWrapping="Wrap" />
        <controls:Calendar x:Name="cal3" />
        </StackPanel>
     </StackPanel>
</UserControl>

The previous example produces output that is similar to the following illustration. Two Calendar controls are shown, one with selections and blackout dates and one without.

Silverlight Calendar control
Inheritance Hierarchy

System..::.Object
  System.Windows..::.DependencyObject
    System.Windows..::.UIElement
      System.Windows..::.FrameworkElement
        System.Windows.Controls..::.Control
          System.Windows.Controls..::.Calendar
Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Platforms

For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.

See Also

Reference

Other Resources

Tags :


Page view tracker