Introduction
This tip is about how to change dafault style and size of datepicker
in WPF.
Using the Code
To change default datepicker style, we need to create a new style for datepicker
in WPF as given below:
<Style x:Key="DatePickerStyle1" TargetType="{x:Type DatePicker}">
<Setter Property="Foreground" Value="#FF333333"/>
<Setter Property="IsTodayHighlighted" Value="True"/>
<Setter Property="SelectedDateFormat" Value="Short"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Padding" Value="2"/>
<Setter Property="BorderBrush">
<Setter.Value>
<LinearGradientBrush EndPoint=".5,0" StartPoint=".5,1">
<GradientStop Color="#FFA3AEB9" Offset="0"/>
<GradientStop Color="#FF8399A9" Offset="0.375"/>
<GradientStop Color="#FF718597" Offset="0.375"/>
<GradientStop Color="#FF617584" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DatePicker}">
<Border BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
Padding="{TemplateBinding Padding}">
<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>
<Grid x:Name="PART_Root"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
<Grid.Resources>
<SolidColorBrush x:Key="DisabledBrush"
Color="#A5FFFFFF"/>
<ControlTemplate x:Key="DropDownButtonTemplate"
TargetType="{x:Type Button}">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0"/>
<VisualTransition GeneratedDuration="0:0:0.1"
To="MouseOver"/>
<VisualTransition GeneratedDuration="0:0:0.1"
To="Pressed"/>
</VisualStateGroup.Transitions>
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimation Duration="0"
To="#FF448DCA"
Storyboard.TargetProperty="(Border.Background).
(SolidColorBrush.Color)"
Storyboard.TargetName="Background"/>
<ColorAnimationUsingKeyFrames BeginTime="0"
Duration="00:00:00.001"
Storyboard.TargetProperty="(Border.Background).
(GradientBrush.GradientStops)[3].
(GradientStop.Color)"
Storyboard.TargetName="BackgroundGradient">
<SplineColorKeyFrame KeyTime="0"
Value="#7FFFFFFF"/>
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames BeginTime="0"
Duration="00:00:00.001"
Storyboard.TargetProperty="
(Border.Background).
(GradientBrush.GradientStops)[2].
(GradientStop.Color)"
Storyboard.TargetName="BackgroundGradient">
<SplineColorKeyFrame KeyTime="0"
Value="#CCFFFFFF"/>
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames BeginTime="0"
Duration="00:00:00.001"
Storyboard.TargetProperty=
"(Border.Background).
(GradientBrush.GradientStops)[1].
(GradientStop.Color)" Storyboard.TargetName=
"BackgroundGradient">
<SplineColorKeyFrame KeyTime="0"
Value="#F2FFFFFF"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<ColorAnimationUsingKeyFrames BeginTime="0"
Duration="00:00:00.001"
Storyboard.TargetProperty="(Border.Background).
(SolidColorBrush.Color)"
Storyboard.TargetName="Background">
<SplineColorKeyFrame KeyTime="0"
Value="#FF448DCA"/>
</ColorAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames BeginTime="0"
Duration="00:00:00.001"
Storyboard.TargetProperty=
"(UIElement.Opacity)"
Storyboard.TargetName="Highlight">
<SplineDoubleKeyFrame KeyTime="0"
Value="1"/>
</DoubleAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames BeginTime="0"
Duration="00:00:00.001"
Storyboard.TargetProperty="(Border.Background).
(GradientBrush.GradientStops)[1].
(GradientStop.Color)"
Storyboard.TargetName="BackgroundGradient">
<SplineColorKeyFrame KeyTime="0"
Value="#EAFFFFFF"/>
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames BeginTime="0"
Duration="00:00:00.001"
Storyboard.TargetProperty="(Border.Background).
(GradientBrush.GradientStops)[2].
(GradientStop.Color)"
Storyboard.TargetName="BackgroundGradient">
<SplineColorKeyFrame KeyTime="0"
Value="#C6FFFFFF"/>
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames BeginTime="0"
Duration="00:00:00.001"
Storyboard.TargetProperty="(Border.Background).
(GradientBrush.GradientStops)[3].
(GradientStop.Color)"
Storyboard.TargetName="BackgroundGradient">
<SplineColorKeyFrame KeyTime="0"
Value="#6BFFFFFF"/>
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames BeginTime="0"
Duration="00:00:00.001"
Storyboard.TargetProperty="(Border.Background).
(GradientBrush.GradientStops)[0].
(GradientStop.Color)"
Storyboard.TargetName="BackgroundGradient">
<SplineColorKeyFrame KeyTime="0"
Value="#F4FFFFFF"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Disabled"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid Background="#11FFFFFF"
FlowDirection="LeftToRight"
HorizontalAlignment="Center" Height="45"
Margin="0" VerticalAlignment="Center"
Width="45">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20*"/>
<ColumnDefinition Width="20*"/>
<ColumnDefinition Width="20*"/>
<ColumnDefinition Width="20*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="23*"/>
<RowDefinition Height="19*"/>
<RowDefinition Height="19*"/>
<RowDefinition Height="19*"/>
</Grid.RowDefinitions>
<Border x:Name="Highlight"
BorderBrush="#FF45D6FA"
BorderThickness="1" Grid.ColumnSpan="4"
CornerRadius="0,0,1,1" Margin="-1"
Opacity="0" Grid.Row="0"
Grid.RowSpan="4"/>
<Border x:Name="Background"
BorderBrush="#FFFFFFFF"
BorderThickness="1" Background="#FF1F3B53"
Grid.ColumnSpan="4" CornerRadius=".5"
Margin="0,-1,0,0" Opacity="1"
Grid.Row="1" Grid.RowSpan="3"/>
<Border x:Name="BackgroundGradient"
BorderBrush="#BF000000"
BorderThickness="1" Grid.ColumnSpan="4"
CornerRadius=".5" Margin="0,-1,0,0"
Opacity="1" Grid.Row="1"
Grid.RowSpan="3">
<Border.Background>
<LinearGradientBrush EndPoint=".7,1"
StartPoint=".7,0">
<GradientStop Color="#FFFFFFFF"
Offset="0"/>
<GradientStop Color="#F9FFFFFF"
Offset="0.375"/>
<GradientStop Color="#E5FFFFFF"
Offset="0.625"/>
<GradientStop Color="#C6FFFFFF"
Offset="1"/>
</LinearGradientBrush>
</Border.Background>
</Border>
<Rectangle Grid.ColumnSpan="4"
Grid.RowSpan="1" StrokeThickness="1">
<Rectangle.Fill>
<LinearGradientBrush EndPoint="0.3,-1.1"
StartPoint="0.46,1.6">
<GradientStop Color="#FF4084BD"/>
<GradientStop Color="#FFAFCFEA"
Offset="1"/>
</LinearGradientBrush>
</Rectangle.Fill>
<Rectangle.Stroke>
<LinearGradientBrush EndPoint="0.48,-1"
StartPoint="0.48,1.25">
<GradientStop Color="#FF494949"/>
<GradientStop Color="#FF9F9F9F"
Offset="1"/>
</LinearGradientBrush>
</Rectangle.Stroke>
</Rectangle>
-->
<TextBlock Margin="2,0" Grid.Row="1"
Grid.RowSpan="3" Grid.ColumnSpan="4"
Grid.Column="0"
Text="{Binding Source={x:Static System:DateTime.Now},
StringFormat=dd}" HorizontalAlignment="Center"
VerticalAlignment="Center" FontSize="18"
FontFamily="Arial Bold" />
<Ellipse Grid.ColumnSpan="4"
Fill="#FFFFFFFF" HorizontalAlignment="Center"
Height="3" StrokeThickness="0"
VerticalAlignment="Center" Width="3"/>
<Border x:Name="DisabledVisual"
BorderBrush="#B2FFFFFF" BorderThickness="1"
Grid.ColumnSpan="4" CornerRadius="0,0,.5,.5"
Opacity="0" Grid.Row="0"
Grid.RowSpan="4"/>
</Grid>
</Grid>
</ControlTemplate>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="50"/>
</Grid.ColumnDefinitions>
<Button x:Name="PART_Button" Grid.Column="1"
Foreground="{TemplateBinding Foreground}"
Focusable="False" HorizontalAlignment="Center"
Margin="3,0,3,0" Grid.Row="0"
Template="{StaticResource DropDownButtonTemplate}"
VerticalAlignment="Center" />
<DatePickerTextBox x:Name="PART_TextBox" Grid.Column="0"
Focusable="{TemplateBinding Focusable}"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
Grid.Row="0"
VerticalContentAlignment="
{TemplateBinding VerticalContentAlignment}"
FontSize="{TemplateBinding FontSize}"/>
<Grid x:Name="PART_DisabledVisual"
Grid.ColumnSpan="2" Grid.Column="0"
IsHitTestVisible="False" Opacity="0"
Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Rectangle Grid.Column="0" Fill="#A5FFFFFF"
RadiusY="1" Grid.Row="0" RadiusX="1"/>
<Rectangle Grid.Column="1" Fill="#A5FFFFFF"
Height="18" Margin="3,0,3,0"
RadiusY="1" Grid.Row="0"
RadiusX="1" Width="19"/>
<Popup x:Name="PART_Popup" AllowsTransparency="
True" Placement="Bottom"
PlacementTarget="{Binding ElementName=PART_TextBox}"
StaysOpen="False"/>
</Grid>
</Grid>
</Border>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding Source={x:Static
SystemParameters.HighContrast}}" Value="false">
<Setter Property="Foreground"
TargetName="PART_TextBox" Value="{Binding Foreground,
RelativeSource={RelativeSource TemplatedParent}}"/>
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Now, we can use this style in 'DatePicker
' control as:
Style="{StaticResource DatePickerStyle1}"
This style is setting current date on calendar icon automatically. To show default calendar icon, you need to comment given below line and uncomment commented line.
<TextBlock Margin="2,0" Grid.Row="1"
Grid.RowSpan="3" Grid.ColumnSpan="4"
Grid.Column="0"
Text="{Binding Source={x:Static System:DateTime.Now},
StringFormat=dd}"
HorizontalAlignment="Center" VerticalAlignment="Center"
FontSize="18" FontFamily="Arial Bold" />
You can modify style
as needed.