Calendar Styles and Templates

This topic describes the styles and templates for the Calendar control. You can modify the default ControlTemplate to give the control a unique appearance. For more information, see Customizing the Appearance of an Existing Control by Creating a ControlTemplate.

Calendar Parts

The following table lists the named parts for the Calendar control.

Part

Type

Description

PART_CalendarItem

CalendarItem

The currently displayed month or year on the Calendar.

PART_Root

Panel

The panel that contains the CalendarItem.

Calendar States

The following table lists the visual states for the Calendar control.

VisualState Name

VisualStateGroup Name

Description

Valid

ValidationStates

The control uses the Validation class and the Validation.HasError attached property is false.

InvalidFocused

ValidationStates

The Validation.HasError attached property is true has the control has focus.

InvalidUnfocused

ValidationStates

The Validation.HasError attached property is true has the control does not have focus.

CalendarItem Parts

The following table lists the named parts for the CalendarItem control.

Part

Type

Description

PART_Root

FrameworkElement

The root of the control.

PART_PreviousButton

Button

The button that displays the previous page of the calendar when it is clicked.

PART_NextButton

Button

The button that displays the next page of the calendar when it is clicked.

PART_HeaderButton

Button

The button that allows switching between month mode, year mode, and decade mode.

PART_MonthView

Grid

Hosts the content when in month mode.

PART_YearView

Grid

Hosts the content when in year or decade mode.

PART_DisabledVisual

FrameworkElement

The overlay for the disabled state.

DayTitleTemplate

DataTemplate

The DataTemplate that describes the visual structure.

CalendarItem States

The following table lists the visual states for the CalendarItem control.

VisualState Name

VisualStateGroup Name

Description

Normal State

CommonStates

The default state.

Disabled State

CommonStates

The state of the calendar when the IsEnabled property is false.

Valid

ValidationStates

The control uses the Validation class and the Validation.HasError attached property is false.

InvalidFocused

ValidationStates

The Validation.HasError attached property is true has the control has focus.

InvalidUnfocused

ValidationStates

The Validation.HasError attached property is true has the control does not have focus.

Valid

ValidationStates

The control uses the Validation class and the Validation.HasError attached property is false.

InvalidFocused

ValidationStates

The Validation.HasError attached property is true has the control has focus.

InvalidUnfocused

ValidationStates

The Validation.HasError attached property is true has the control does not have focus.

CalendarDayButton Parts

The CalendarDayButton control does not have any named parts.

CalendarDayButton States

The following table lists the visual states for the CalendarDayButton control.

VisualState Name

VisualStateGroup Name

Description

Normal

CommonStates

The default state.

Disabled

CommonStates

The CalendarDayButton is disabled.

MouseOver

CommonStates

The mouse pointer is positioned over the CalendarDayButton.

Pressed

CommonStates

The CalendarDayButton is pressed.

Selected

SelectionStates

The button is selected.

Unselected

SelectionStates

The button is not selected.

CalendarButtonFocused

CalendarButtonFocusStates

The button has focus.

CalendarButtonUnfocused

CalendarButtonFocusStates

The button does not have focus.

Focused

FocusStates

The button has focus.

Unfocused

FocusStates

The button does not have focus.

Active

ActiveStates

The button is active.

Inactive

ActiveStates

The button is inactive.

RegularDay

DayStates

The button does not represent DateTime.Today.

Today

DayStates

The button represents DateTime.Today.

NormalDay

BlackoutDayStates

The button represents a day that can be selected.

BlackoutDay

BlackoutDayStates

The button represents a day that cannot be selected.

Valid

ValidationStates

The control uses the Validation class and the Validation.HasError attached property is false.

InvalidFocused

ValidationStates

The Validation.HasError attached property is true has the control has focus.

InvalidUnfocused

ValidationStates

The Validation.HasError attached property is true has the control does not have focus.

CalendarButton Parts

The CalendarButton control does not have any named parts.

CalendarButton States

The following table lists the visual states for the CalendarButton control.

VisualState Name

VisualStateGroup Name

Description

Normal

CommonStates

The default state.

Disabled

CommonStates

The CalendarButton is disabled.

MouseOver

CommonStates

The mouse pointer is positioned over the CalendarButton.

Pressed

CommonStates

The CalendarButton is pressed.

Selected

SelectionStates

The button is selected.

Unselected

SelectionStates

The button is not selected.

CalendarButtonFocused

CalendarButtonFocusStates

The button has focus.

CalendarButtonUnfocused

CalendarButtonFocusStates

The button does not have focus.

Focused

FocusStates

The button has focus.

Unfocused

FocusStates

The button does not have focus.

Active

ActiveStates

The button is active.

Inactive

ActiveStates

The button is inactive.

Valid

ValidationStates

The control uses the Validation class and the Validation.HasError attached property is false.

InvalidFocused

ValidationStates

The Validation.HasError attached property is true has the control has focus.

InvalidUnfocused

ValidationStates

The Validation.HasError attached property is true has the control does not have focus.

Calendar ControlTemplate Example

The following example shows how to define a ControlTemplate for the Calendar control and associated types.

<!--Style for the days of a month.-->
<Style TargetType="CalendarDayButton"
       x:Key="CalendarDayButtonStyle">
  <Setter Property="MinWidth"
          Value="5" />
  <Setter Property="MinHeight"
          Value="5" />
  <Setter Property="FontSize"
          Value="10" />
  <Setter Property="HorizontalContentAlignment"
          Value="Center" />
  <Setter Property="VerticalContentAlignment"
          Value="Center" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="CalendarDayButton">
        <Grid>
          <VisualStateManager.VisualStateGroups>
            <VisualStateGroup Name="CommonStates">
              <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0:0:0.1" />
              </VisualStateGroup.Transitions>
              <VisualState Name="Normal" />
              <VisualState Name="MouseOver">
                <Storyboard>
                  <DoubleAnimation Storyboard.TargetName="HighlightBackground"
                                   Storyboard.TargetProperty="Opacity"
                                   To="0.5"
                                   Duration="0" />
                </Storyboard>
              </VisualState>
              <VisualState Name="Pressed">
                <Storyboard>
                  <DoubleAnimation Storyboard.TargetName="HighlightBackground"
                                   Storyboard.TargetProperty="Opacity"
                                   To="0.5"
                                   Duration="0" />
                </Storyboard>
              </VisualState>
              <VisualState Name="Disabled">
                <Storyboard>
                  <DoubleAnimation Storyboard.TargetName="HighlightBackground"
                                   Storyboard.TargetProperty="Opacity"
                                   To="0"
                                   Duration="0" />
                  <DoubleAnimation Storyboard.TargetName="NormalText"
                                   Storyboard.TargetProperty="Opacity"
                                   To=".35"
                                   Duration="0" />
                </Storyboard>
              </VisualState>
            </VisualStateGroup>
            <VisualStateGroup Name="SelectionStates">
              <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0" />
              </VisualStateGroup.Transitions>
              <VisualState Name="Unselected" />
              <VisualState Name="Selected">
                <Storyboard>
                  <DoubleAnimation Storyboard.TargetName="SelectedBackground"
                                   Storyboard.TargetProperty="Opacity"
                                   To=".75"
                                   Duration="0" />
                </Storyboard>
              </VisualState>
            </VisualStateGroup>
            <VisualStateGroup Name="CalendarButtonFocusStates">
              <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0" />
              </VisualStateGroup.Transitions>
              <VisualState Name="CalendarButtonFocused">
                <Storyboard>
                  <ObjectAnimationUsingKeyFrames Storyboard.TargetName="DayButtonFocusVisual"
                                                 Storyboard.TargetProperty="Visibility"
                                                 Duration="0">
                    <DiscreteObjectKeyFrame KeyTime="0">
                      <DiscreteObjectKeyFrame.Value>
                        <Visibility>Visible</Visibility>
                      </DiscreteObjectKeyFrame.Value>
                    </DiscreteObjectKeyFrame>
                  </ObjectAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>
              <VisualState Name="CalendarButtonUnfocused">
                <Storyboard>
                  <ObjectAnimationUsingKeyFrames Storyboard.TargetName="DayButtonFocusVisual"
                                                 Storyboard.TargetProperty="Visibility"
                                                 Duration="0">
                    <DiscreteObjectKeyFrame KeyTime="0">
                      <DiscreteObjectKeyFrame.Value>
                        <Visibility>Collapsed</Visibility>
                      </DiscreteObjectKeyFrame.Value>
                    </DiscreteObjectKeyFrame>
                  </ObjectAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>
            </VisualStateGroup>
            <VisualStateGroup Name="ActiveStates">
              <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0" />
              </VisualStateGroup.Transitions>
              <VisualState Name="Active" />
              <VisualState Name="Inactive">
                <Storyboard>
                  <ColorAnimation Duration="0"
                                  Storyboard.TargetName="NormalText"
                                  Storyboard.TargetProperty="(TextElement.Foreground).
                      (SolidColorBrush.Color)"
                                  To="#FF777777" />
                </Storyboard>
              </VisualState>
            </VisualStateGroup>
            <VisualStateGroup Name="DayStates">
              <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0" />
              </VisualStateGroup.Transitions>
              <VisualState Name="RegularDay" />
              <VisualState Name="Today">
                <Storyboard>
                  <DoubleAnimation Storyboard.TargetName="TodayBackground"
                                   Storyboard.TargetProperty="Opacity"
                                   To="1"
                                   Duration="0" />
                  <ColorAnimation Duration="0"
                                  Storyboard.TargetName="NormalText"
                                  Storyboard.TargetProperty="(TextElement.Foreground).
                      (SolidColorBrush.Color)"
                                  To="#FFFFFFFF" />
                </Storyboard>
              </VisualState>
            </VisualStateGroup>
            <VisualStateGroup Name="BlackoutDayStates">
              <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0" />
              </VisualStateGroup.Transitions>
              <VisualState Name="NormalDay" />
              <VisualState Name="BlackoutDay">
                <Storyboard>
                  <DoubleAnimation Duration="0"
                                   Storyboard.TargetName="Blackout"
                                   Storyboard.TargetProperty="Opacity"
                                   To=".2" />
                </Storyboard>
              </VisualState>
            </VisualStateGroup>
          </VisualStateManager.VisualStateGroups>
          <Rectangle x:Name="TodayBackground"
                     RadiusX="1"
                     RadiusY="1"
                     Opacity="0">
            <Rectangle.Fill>
              <SolidColorBrush Color="{DynamicResource SelectedBackgroundColor}" />
            </Rectangle.Fill>
          </Rectangle>
          <Rectangle x:Name="SelectedBackground"
                     RadiusX="1"
                     RadiusY="1"
                     Opacity="0">
            <Rectangle.Fill>
              <SolidColorBrush Color="{DynamicResource SelectedBackgroundColor}" />
            </Rectangle.Fill>
          </Rectangle>
          <Border Background="{TemplateBinding Background}"
                  BorderThickness="{TemplateBinding BorderThickness}"
                  BorderBrush="{TemplateBinding BorderBrush}" />
          <Rectangle x:Name="HighlightBackground"
                     RadiusX="1"
                     RadiusY="1"
                     Opacity="0">
            <Rectangle.Fill>
              <SolidColorBrush Color="{DynamicResource ControlMouseOverColor}" />
            </Rectangle.Fill>
          </Rectangle>
          <ContentPresenter x:Name="NormalText"
                            HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                            VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                            Margin="5,1,5,1">
            <TextElement.Foreground>
              <SolidColorBrush Color="#FF333333" />
            </TextElement.Foreground>
          </ContentPresenter>
          <Path x:Name="Blackout"
                Opacity="0"
                Margin="3"
                HorizontalAlignment="Stretch"
                VerticalAlignment="Stretch"
                RenderTransformOrigin="0.5,0.5"
                Fill="#FF000000"
                Stretch="Fill"
                Data="M8.1772461,11.029181 L10.433105,
                  11.029181 L11.700684,12.801641 L12.973633,
                  11.029181 L15.191895,11.029181 L12.844727,
                  13.999395 L15.21875,17.060919 L12.962891,
                  17.060919 L11.673828,15.256231 L10.352539,
                  17.060919 L8.1396484,17.060919 L10.519043,
                  14.042364 z" />
          <Rectangle x:Name="DayButtonFocusVisual"
                     Visibility="Collapsed"
                     IsHitTestVisible="false"
                     RadiusX="1"
                     RadiusY="1">
            <Rectangle.Stroke>
              <SolidColorBrush Color="{DynamicResource SelectedBackgroundColor}" />
            </Rectangle.Stroke>
          </Rectangle>
        </Grid>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

<!--Style for the months of a year and years of a decade.-->
<Style TargetType="CalendarButton"
       x:Key="CalendarButtonStyle">
  <Setter Property="MinWidth"
          Value="40" />
  <Setter Property="MinHeight"
          Value="42" />
  <Setter Property="FontSize"
          Value="10" />
  <Setter Property="HorizontalContentAlignment"
          Value="Center" />
  <Setter Property="VerticalContentAlignment"
          Value="Center" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="CalendarButton">
        <Grid>
          <VisualStateManager.VisualStateGroups>
            <VisualStateGroup Name="CommonStates">
              <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0:0:0.1" />
              </VisualStateGroup.Transitions>
              <VisualState Name="Normal" />
              <VisualState Name="MouseOver">
                <Storyboard>
                  <DoubleAnimation Storyboard.TargetName="Background"
                                   Storyboard.TargetProperty="Opacity"
                                   To=".5"
                                   Duration="0" />
                </Storyboard>
              </VisualState>
              <VisualState Name="Pressed">
                <Storyboard>
                  <DoubleAnimation Storyboard.TargetName="Background"
                                   Storyboard.TargetProperty="Opacity"
                                   To=".5"
                                   Duration="0" />
                </Storyboard>
              </VisualState>
            </VisualStateGroup>
            <VisualStateGroup Name="SelectionStates">
              <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0" />
              </VisualStateGroup.Transitions>
              <VisualState Name="Unselected" />
              <VisualState Name="Selected">
                <Storyboard>
                  <DoubleAnimation Storyboard.TargetName="SelectedBackground"
                                   Storyboard.TargetProperty="Opacity"
                                   To=".75"
                                   Duration="0" />
                </Storyboard>
              </VisualState>
            </VisualStateGroup>
            <VisualStateGroup Name="ActiveStates">
              <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0" />
              </VisualStateGroup.Transitions>
              <VisualState Name="Active" />
              <VisualState Name="Inactive">
                <Storyboard>
                  <ColorAnimation Duration="0"
                                  Storyboard.TargetName="NormalText"
                                  Storyboard.TargetProperty="(TextElement.Foreground).
                      (SolidColorBrush.Color)"
                                  To="#FF777777" />
                </Storyboard>
              </VisualState>
            </VisualStateGroup>
            <VisualStateGroup Name="CalendarButtonFocusStates">
              <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0" />
              </VisualStateGroup.Transitions>
              <VisualState Name="CalendarButtonFocused">
                <Storyboard>
                  <ObjectAnimationUsingKeyFrames Duration="0"
                                                 Storyboard.TargetName="CalendarButtonFocusVisual"
                                                 Storyboard.TargetProperty="Visibility">
                    <DiscreteObjectKeyFrame KeyTime="0">
                      <DiscreteObjectKeyFrame.Value>
                        <Visibility>Visible</Visibility>
                      </DiscreteObjectKeyFrame.Value>
                    </DiscreteObjectKeyFrame>
                  </ObjectAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>
              <VisualState Name="CalendarButtonUnfocused" />
            </VisualStateGroup>
          </VisualStateManager.VisualStateGroups>
          <Rectangle x:Name="SelectedBackground"
                     RadiusX="1"
                     RadiusY="1"
                     Opacity="0">
            <Rectangle.Fill>
              <SolidColorBrush Color="{DynamicResource SelectedBackgroundColor}" />
            </Rectangle.Fill>
          </Rectangle>
          <Rectangle x:Name="Background"
                     RadiusX="1"
                     RadiusY="1"
                     Opacity="0">
            <Rectangle.Fill>
              <SolidColorBrush Color="{DynamicResource SelectedBackgroundColor}" />
            </Rectangle.Fill>
          </Rectangle>
          <ContentPresenter x:Name="NormalText"
                            HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                            VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                            Margin="1,0,1,1">
            <TextElement.Foreground>
              <SolidColorBrush Color="#FF333333" />
            </TextElement.Foreground>
          </ContentPresenter>
          <Rectangle x:Name="CalendarButtonFocusVisual"
                     Visibility="Collapsed"
                     IsHitTestVisible="false"
                     RadiusX="1"
                     RadiusY="1">
            <Rectangle.Stroke>
              <SolidColorBrush Color="{DynamicResource SelectedBackgroundColor}" />
            </Rectangle.Stroke>
          </Rectangle>
        </Grid>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
  <Setter Property="Background">
    <Setter.Value>
      <SolidColorBrush Color="{DynamicResource ControlMediumColor}" />
    </Setter.Value>
  </Setter>
</Style>

<!--Button to go to the previous month or year.-->
<ControlTemplate x:Key="PreviousButtonTemplate"
                 TargetType="{x:Type Button}">
  <Grid Cursor="Hand">
    <VisualStateManager.VisualStateGroups>
      <VisualStateGroup x:Name="CommonStates">
        <VisualState x:Name="Normal" />
        <VisualState x:Name="MouseOver">
          <Storyboard>
            <ColorAnimation Duration="0"
                            Storyboard.TargetName="path"
                            Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"
                            To="{DynamicResource GlyphMouseOver}" />
          </Storyboard>
        </VisualState>
        <VisualState x:Name="Disabled">
          <Storyboard>
            <DoubleAnimation Duration="0"
                             To=".5"
                             Storyboard.TargetProperty="(Shape.Fill).(Brush.Opacity)"
                             Storyboard.TargetName="path" />
          </Storyboard>
        </VisualState>
      </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <!--<Rectangle Fill="Transparent" Opacity="1" Stretch="Fill"/>-->
    <Grid  Background="Transparent">
      <Path x:Name="path"
            Margin="14,-6,0,0"
            Stretch="Fill"
            HorizontalAlignment="Left"
            Height="10"
            VerticalAlignment="Center"
            Width="6"
            Data="M288.75,232.25 L288.75,240.625 L283,236.625 z">
        <Path.Fill>
          <SolidColorBrush Color="{DynamicResource GlyphColor}" />
        </Path.Fill>
      </Path>
    </Grid>
  </Grid>
</ControlTemplate>

<!--Button to go to the next month or year.-->
<ControlTemplate x:Key="NextButtonTemplate"
                 TargetType="{x:Type Button}">
  <Grid Cursor="Hand">
    <VisualStateManager.VisualStateGroups>
      <VisualStateGroup x:Name="CommonStates">
        <VisualState x:Name="Normal" />
        <VisualState x:Name="MouseOver">
          <Storyboard>
            <ColorAnimation Duration="0"
                            To="{StaticResource GlyphMouseOver}"
                            Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"
                            Storyboard.TargetName="path" />
          </Storyboard>
        </VisualState>
        <VisualState x:Name="Disabled">
          <Storyboard>
            <DoubleAnimation Duration="0"
                             To=".5"
                             Storyboard.TargetProperty="(Shape.Fill).(Brush.Opacity)"
                             Storyboard.TargetName="path" />
          </Storyboard>
        </VisualState>
      </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <!--<Rectangle Fill="#11E5EBF1" Opacity="1" Stretch="Fill"/>-->
    <Grid Background="Transparent">
      <Path x:Name="path"
            Data="M282.875,231.875 L282.875,240.375 L288.625,236 z"
            HorizontalAlignment="Right"
            Height="10"
            Margin="0,-6,14,0"
            Stretch="Fill"
            VerticalAlignment="Center"
            Width="6">
        <Path.Fill>
          <SolidColorBrush Color="{DynamicResource GlyphColor}" />
        </Path.Fill>
      </Path>
    </Grid>
  </Grid>
</ControlTemplate>

<!--Button to go up a level to the year or decade.-->
<ControlTemplate x:Key="HeaderButtonTemplate"
                 TargetType="{x:Type Button}">
  <Grid Cursor="Hand">
    <VisualStateManager.VisualStateGroups>
      <VisualStateGroup x:Name="CommonStates">
        <VisualState x:Name="Normal" />
        <VisualState x:Name="MouseOver">
          <Storyboard>
            <ColorAnimation Duration="0"
                            To="{DynamicResource GlyphMouseOver}"
                            Storyboard.TargetProperty="(TextElement.Foreground).
                (SolidColorBrush.Color)"
                            Storyboard.TargetName="buttonContent" />
          </Storyboard>
        </VisualState>
        <VisualState x:Name="Disabled">
          <Storyboard>
            <DoubleAnimation Duration="0"
                             To=".5"
                             Storyboard.TargetProperty="Opacity"
                             Storyboard.TargetName="buttonContent" />
          </Storyboard>
        </VisualState>
      </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <ContentPresenter x:Name="buttonContent"
                      Margin="1,4,1,9"
                      ContentTemplate="{TemplateBinding ContentTemplate}"
                      Content="{TemplateBinding Content}"
                      TextElement.Foreground="#FF333333"
                      HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                      VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
  </Grid>
</ControlTemplate>

<Style x:Key="CalendarItemStyle" TargetType="{x:Type CalendarItem}">
  <Setter Property="Margin"
          Value="0,3,0,3" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type CalendarItem}">
        <ControlTemplate.Resources>
          <DataTemplate x:Key="{x:Static CalendarItem.DayTitleTemplateResourceKey}">
            <TextBlock Foreground="#FF333333"
                       FontWeight="Bold"
                       FontSize="9.5"
                       FontFamily="Verdana"
                       Margin="0,6,0,6"
                       Text="{Binding}"
                       HorizontalAlignment="Center"
                       VerticalAlignment="Center" />
          </DataTemplate>
        </ControlTemplate.Resources>
        <Grid x:Name="PART_Root">
          <Grid.Resources>
            <SolidColorBrush x:Key="DisabledColor"
                             Color="#A5FFFFFF" />
          </Grid.Resources>
          <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="CommonStates">
              <VisualState x:Name="Normal" />
              <VisualState x:Name="Disabled">
                <Storyboard>
                  <DoubleAnimation Duration="0"
                                   To="1"
                                   Storyboard.TargetProperty="Opacity"
                                   Storyboard.TargetName="PART_DisabledVisual" />
                </Storyboard>
              </VisualState>
            </VisualStateGroup>
          </VisualStateManager.VisualStateGroups>
          <Border BorderBrush="{TemplateBinding BorderBrush}"
                  BorderThickness="{TemplateBinding BorderThickness}"
                  Background="{TemplateBinding Background}"
                  CornerRadius="1">
            <Border BorderBrush="#FFFFFFFF"
                    BorderThickness="2"
                    CornerRadius="1">
              <Grid>
                <Grid.Resources>
                </Grid.Resources>
                <Grid.ColumnDefinitions>
                  <ColumnDefinition Width="Auto" />
                  <ColumnDefinition Width="Auto" />
                  <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                  <RowDefinition Height="Auto" />
                  <RowDefinition Height="*" />
                </Grid.RowDefinitions>
                <Button x:Name="PART_PreviousButton"
                        Template="{StaticResource PreviousButtonTemplate}"
                        Focusable="False"
                        HorizontalAlignment="Left"
                        Grid.Column="0"
                        Grid.Row="0"
                        Height="20"
                        Width="28" />
                <Button x:Name="PART_HeaderButton"
                        FontWeight="Bold"
                        Focusable="False"
                        FontSize="10.5"
                        HorizontalAlignment="Center"
                        VerticalAlignment="Center"
                        Grid.Column="1"
                        Grid.Row="0"
                        Template="{StaticResource HeaderButtonTemplate}" />
                <Button x:Name="PART_NextButton"
                        Focusable="False"
                        HorizontalAlignment="Right"
                        Grid.Column="2"
                        Grid.Row="0"
                        Template="{StaticResource NextButtonTemplate}"
                        Height="20"
                        Width="28" />
                <Grid x:Name="PART_MonthView"
                      Visibility="Visible"
                      Grid.ColumnSpan="3"
                      Grid.Row="1"
                      Margin="6,-1,6,6"
                      HorizontalAlignment="Center">
                  <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                  </Grid.ColumnDefinitions>
                  <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                  </Grid.RowDefinitions>
                </Grid>
                <Grid x:Name="PART_YearView"
                      Visibility="Hidden"
                      Grid.ColumnSpan="3"
                      Grid.Row="1"
                      HorizontalAlignment="Center"
                      Margin="6,-3,7,6">
                  <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                  </Grid.ColumnDefinitions>
                  <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                  </Grid.RowDefinitions>
                </Grid>
              </Grid>
            </Border>
          </Border>
          <Rectangle x:Name="PART_DisabledVisual"
                     Fill="{StaticResource DisabledColor}"
                     Opacity="0"
                     RadiusY="2"
                     RadiusX="2"
                     Stretch="Fill"
                     Stroke="{StaticResource DisabledColor}"
                     StrokeThickness="1"
                     Visibility="Collapsed" />
        </Grid>
        <ControlTemplate.Triggers>
          <Trigger Property="IsEnabled"
                   Value="False">
            <Setter Property="Visibility"
                    TargetName="PART_DisabledVisual"
                    Value="Visible" />
          </Trigger>
          <DataTrigger Binding="{Binding DisplayMode, 
              RelativeSource={RelativeSource FindAncestor, 
              AncestorType={x:Type Calendar}}}"
                       Value="Year">
            <Setter Property="Visibility"
                    TargetName="PART_MonthView"
                    Value="Hidden" />
            <Setter Property="Visibility"
                    TargetName="PART_YearView"
                    Value="Visible" />
          </DataTrigger>
          <DataTrigger Binding="{Binding DisplayMode, 
              RelativeSource={RelativeSource FindAncestor, 
              AncestorType={x:Type Calendar}}}"
                       Value="Decade">
            <Setter Property="Visibility"
                    TargetName="PART_MonthView"
                    Value="Hidden" />
            <Setter Property="Visibility"
                    TargetName="PART_YearView"
                    Value="Visible" />
          </DataTrigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

<Style TargetType="{x:Type Calendar}">
  <Setter Property="CalendarButtonStyle"
          Value="{StaticResource CalendarButtonStyle}" />
  <Setter Property="CalendarDayButtonStyle"
          Value="{StaticResource CalendarDayButtonStyle}" />
  <Setter Property="CalendarItemStyle"
          Value="{StaticResource CalendarItemStyle}" />
  <Setter Property="Foreground"
          Value="#FF333333" />
  <Setter Property="Background">
    <Setter.Value>
      <LinearGradientBrush EndPoint="0.5,1"
                           StartPoint="0.5,0">

        <!--The first two gradient stops specifies the background for 
            the calendar's heading and navigation buttons.-->
        <GradientStop Color="{DynamicResource HeaderTopColor}"
                      Offset="0" />
        <GradientStop Color="{DynamicResource ControlMediumColor}"
                      Offset="0.16" />

        <!--The next gradient stop specifies the background for 
            the calendar area.-->
        <GradientStop Color="{DynamicResource ControlLightColor}"
                      Offset="0.16" />
      </LinearGradientBrush>
    </Setter.Value>
  </Setter>
  <Setter Property="BorderBrush">
    <Setter.Value>
      <LinearGradientBrush EndPoint="0,1"
                           StartPoint="0,0">
        <GradientStop Color="{DynamicResource BorderLightColor}"
                      Offset="0" />
        <GradientStop Color="{DynamicResource BorderDarkColor}"
                      Offset="1" />
      </LinearGradientBrush>
    </Setter.Value>
  </Setter>
  <Setter Property="BorderThickness"
          Value="1" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type Calendar}">
        <StackPanel x:Name="PART_Root"
                    HorizontalAlignment="Center">
          <CalendarItem x:Name="PART_CalendarItem"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}"
                        Background="{TemplateBinding Background}"
                        Style="{TemplateBinding CalendarItemStyle}" />
        </StackPanel>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

The preceding example uses one or more of the following resources.

<!--Control colors.-->
<Color x:Key="WindowColor">#FFE8EDF9</Color>
<Color x:Key="ContentAreaColorLight">#FFC5CBF9</Color>
<Color x:Key="ContentAreaColorDark">#FF7381F9</Color>

<Color x:Key="DisabledControlLightColor">#FFE8EDF9</Color>
<Color x:Key="DisabledControlDarkColor">#FFC5CBF9</Color>
<Color x:Key="DisabledForegroundColor">#FF888888</Color>

<Color x:Key="SelectedBackgroundColor">#FFC5CBF9</Color>
<Color x:Key="SelectedUnfocusedColor">#FFDDDDDD</Color>

<Color x:Key="ControlLightColor">White</Color>
<Color x:Key="ControlMediumColor">#FF7381F9</Color>
<Color x:Key="ControlDarkColor">#FF211AA9</Color>

<Color x:Key="ControlMouseOverColor">#FF3843C4</Color>
<Color x:Key="ControlPressedColor">#FF211AA9</Color>


<Color x:Key="GlyphColor">#FF444444</Color>
<Color x:Key="GlyphMouseOver">sc#1, 0.004391443, 0.002428215, 0.242281124</Color>

<!--Border colors-->
<Color x:Key="BorderLightColor">#FFCCCCCC</Color>
<Color x:Key="BorderMediumColor">#FF888888</Color>
<Color x:Key="BorderDarkColor">#FF444444</Color>

<Color x:Key="PressedBorderLightColor">#FF888888</Color>
<Color x:Key="PressedBorderDarkColor">#FF444444</Color>

<Color x:Key="DisabledBorderLightColor">#FFAAAAAA</Color>
<Color x:Key="DisabledBorderDarkColor">#FF888888</Color>

<Color x:Key="DefaultBorderBrushDarkColor">Black</Color>

<!--Control-specific resources.-->
<Color x:Key="HeaderTopColor">#FFC5CBF9</Color>
<Color x:Key="DatagridCurrentCellBorderColor">Black</Color>
<Color x:Key="SliderTrackDarkColor">#FFC5CBF9</Color>

<Color x:Key="NavButtonFrameColor">#FF3843C4</Color>

<LinearGradientBrush x:Key="MenuPopupBrush"
                     EndPoint="0.5,1"
                     StartPoint="0.5,0">
  <GradientStop Color="{DynamicResource ControlLightColor}"
                Offset="0" />
  <GradientStop Color="{DynamicResource ControlMediumColor}"
                Offset="0.5" />
  <GradientStop Color="{DynamicResource ControlLightColor}"
                Offset="1" />
</LinearGradientBrush>

<LinearGradientBrush x:Key="ProgressBarIndicatorAnimatedFill"
                     StartPoint="0,0"
                     EndPoint="1,0">
  <LinearGradientBrush.GradientStops>
    <GradientStopCollection>
      <GradientStop Color="#000000FF"
                    Offset="0" />
      <GradientStop Color="#600000FF"
                    Offset="0.4" />
      <GradientStop Color="#600000FF"
                    Offset="0.6" />
      <GradientStop Color="#000000FF"
                    Offset="1" />
    </GradientStopCollection>
  </LinearGradientBrush.GradientStops>
</LinearGradientBrush>

For the complete sample, see Styling with ControlTemplates Sample.

See Also

Reference

Style

ControlTemplate

Concepts

Styling and Templating

Customizing the Appearance of an Existing Control by Creating a ControlTemplate

Other Resources

Control Styles and Templates

Control Customization