Themes/MaterialDesignTheme.DatePicker.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:converters="clr-namespace:MaterialDesignThemes.Wpf.Converters"
                    xmlns:internal="clr-namespace:MaterialDesignThemes.Wpf.Internal"
                    xmlns:wpf="clr-namespace:MaterialDesignThemes.Wpf">
  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Calendar.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.TextBox.xaml" />
  </ResourceDictionary.MergedDictionaries>
 
  <Style x:Key="MaterialDesignDatePickerCalendarPortrait"
         TargetType="{x:Type Calendar}"
         BasedOn="{StaticResource MaterialDesignCalendarPortrait}">
    <Setter Property="Margin" Value="16,8,16,24" />
    <Setter Property="wpf:ElevationAssist.Elevation" Value="Dp12" />
  </Style>
 
  <Style x:Key="MaterialDesignDatePicker" TargetType="{x:Type DatePicker}">
    <Style.Resources>
      <Style x:Key="NestedTextBoxStyle" TargetType="{x:Type DatePickerTextBox}" BasedOn="{StaticResource MaterialDesignTextBox}" />
    </Style.Resources>
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.ForegroundLight}" />
    <Setter Property="BorderThickness" Value="0,0,0,1" />
    <Setter Property="CalendarStyle" Value="{StaticResource MaterialDesignDatePickerCalendarPortrait}" />
    <Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}" />
    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    <Setter Property="IsTodayHighlighted" Value="True" />
    <Setter Property="Padding" Value="{x:Static wpf:Constants.TextBoxDefaultPadding}" />
    <Setter Property="SelectedDateFormat" Value="Short" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type DatePicker}">
          <ControlTemplate.Resources>
            <converters:ThicknessCloneConverter x:Key="DatePickerTextBoxPaddingConverter"
                                                AdditionalOffsetRight="18"
                                                CloneEdges="All" />
            <converters:ThicknessCloneConverter x:Key="PartButtonMarginConverter"
                                                CloneEdges="Top,Right,Bottom"
                                                FixedLeft="0" />
            <converters:NonDefaultThicknessConverter x:Key="OutlinedBorderInactiveThicknessConverter" DefaultThickness="{x:Static wpf:Constants.DefaultOutlinedBorderInactiveThickness}" />
            <converters:NonDefaultThicknessConverter x:Key="OutlinedBorderActiveThicknessConverter" DefaultThickness="{x:Static wpf:Constants.DefaultOutlinedBorderActiveThickness}" />
 
            <ControlTemplate x:Key="CalendarButtonTemplate" TargetType="{x:Type Button}">
              <wpf:PackIcon VerticalAlignment="Center"
                            Background="Transparent"
                            Foreground="{TemplateBinding Foreground}"
                            Kind="Calendar" />
            </ControlTemplate>
          </ControlTemplate.Resources>
          <Grid x:Name="PART_Root">
            <DatePickerTextBox x:Name="PART_TextBox"
                               Padding="{TemplateBinding Padding, Converter={StaticResource DatePickerTextBoxPaddingConverter}}"
                               VerticalAlignment="Stretch"
                               HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                               VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                               wpf:HintAssist.FloatingOffset="{TemplateBinding wpf:HintAssist.FloatingOffset}"
                               wpf:HintAssist.FloatingScale="{TemplateBinding wpf:HintAssist.FloatingScale}"
                               wpf:HintAssist.FontFamily="{TemplateBinding wpf:HintAssist.FontFamily}"
                               wpf:HintAssist.Foreground="{TemplateBinding wpf:HintAssist.Foreground}"
                               wpf:HintAssist.Background="{TemplateBinding wpf:HintAssist.Background}"
                               wpf:HintAssist.HintPaddingBrush="{TemplateBinding wpf:HintAssist.HintPaddingBrush}"
                               wpf:HintAssist.HelperTextStyle="{TemplateBinding wpf:HintAssist.HelperTextStyle}"
                               wpf:HintAssist.Hint="{TemplateBinding wpf:HintAssist.Hint}"
                               wpf:HintAssist.HintOpacity="{TemplateBinding wpf:HintAssist.HintOpacity}"
                               wpf:HintAssist.IsFloating="{TemplateBinding wpf:HintAssist.IsFloating}"
                               wpf:TextFieldAssist.HasLeadingIcon="{TemplateBinding wpf:TextFieldAssist.HasLeadingIcon}"
                               wpf:TextFieldAssist.LeadingIcon="{TemplateBinding wpf:TextFieldAssist.LeadingIcon}"
                               wpf:TextFieldAssist.LeadingIconSize="{TemplateBinding wpf:TextFieldAssist.LeadingIconSize}"
                               wpf:TextFieldAssist.HasTrailingIcon="{TemplateBinding wpf:TextFieldAssist.HasTrailingIcon}"
                               wpf:TextFieldAssist.TrailingIcon="{TemplateBinding wpf:TextFieldAssist.TrailingIcon}"
                               wpf:TextFieldAssist.TrailingIconSize="{TemplateBinding wpf:TextFieldAssist.TrailingIconSize}"
                               wpf:TextFieldAssist.DecorationVisibility="{TemplateBinding wpf:TextFieldAssist.DecorationVisibility}"
                               wpf:TextFieldAssist.HasClearButton="{TemplateBinding wpf:TextFieldAssist.HasClearButton}"
                               wpf:TextFieldAssist.ClearButtonSize="{TemplateBinding wpf:TextFieldAssist.ClearButtonSize}"
                               wpf:TextFieldAssist.HasFilledTextField="{TemplateBinding wpf:TextFieldAssist.HasFilledTextField}"
                               wpf:TextFieldAssist.HasOutlinedTextField="{TemplateBinding wpf:TextFieldAssist.HasOutlinedTextField}"
                               wpf:TextFieldAssist.NewSpecHighlightingEnabled="{TemplateBinding wpf:TextFieldAssist.NewSpecHighlightingEnabled}"
                               wpf:TextFieldAssist.PrefixText="{TemplateBinding wpf:TextFieldAssist.PrefixText}"
                               wpf:TextFieldAssist.PrefixTextVisibility="{TemplateBinding wpf:TextFieldAssist.PrefixTextVisibility}"
                               wpf:TextFieldAssist.PrefixTextHintBehavior="{TemplateBinding wpf:TextFieldAssist.PrefixTextHintBehavior}"
                               wpf:TextFieldAssist.RippleOnFocusEnabled="{TemplateBinding wpf:TextFieldAssist.RippleOnFocusEnabled}"
                               wpf:TextFieldAssist.SuffixText="{TemplateBinding wpf:TextFieldAssist.SuffixText}"
                               wpf:TextFieldAssist.SuffixTextVisibility="{TemplateBinding wpf:TextFieldAssist.SuffixTextVisibility}"
                               wpf:TextFieldAssist.SuffixTextHintBehavior="{TemplateBinding wpf:TextFieldAssist.SuffixTextHintBehavior}"
                               wpf:TextFieldAssist.IconVerticalAlignment="{TemplateBinding wpf:TextFieldAssist.IconVerticalAlignment}"
                               wpf:TextFieldAssist.TextBoxViewVerticalAlignment="{TemplateBinding wpf:TextFieldAssist.TextBoxViewVerticalAlignment}"
                               wpf:TextFieldAssist.TextBoxViewMargin="{TemplateBinding wpf:TextFieldAssist.TextBoxViewMargin}"
                               wpf:TextFieldAssist.TextFieldCornerRadius="{TemplateBinding wpf:TextFieldAssist.TextFieldCornerRadius}"
                               wpf:TextFieldAssist.UnderlineBrush="{TemplateBinding wpf:TextFieldAssist.UnderlineBrush}"
                               wpf:TextFieldAssist.UnderlineCornerRadius="{TemplateBinding wpf:TextFieldAssist.UnderlineCornerRadius}"
                               internal:InternalTextFieldAssist.IsMouseOver="{TemplateBinding IsMouseOver}"
                               BorderBrush="{TemplateBinding BorderBrush}"
                               Focusable="{TemplateBinding Focusable}"
                               Style="{DynamicResource NestedTextBoxStyle}">
              <DatePickerTextBox.BorderThickness>
                <PriorityBinding>
                  <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:DatePickerAssist.OutlinedBorderInactiveThickness)" Converter="{StaticResource OutlinedBorderInactiveThicknessConverter}" />
                  <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="BorderThickness" />
                </PriorityBinding>
              </DatePickerTextBox.BorderThickness>
              <wpf:TextFieldAssist.OutlinedBorderActiveThickness>
                <PriorityBinding>
                  <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:DatePickerAssist.OutlinedBorderActiveThickness)" Converter="{StaticResource OutlinedBorderActiveThicknessConverter}" />
                  <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="(wpf:TextFieldAssist.OutlinedBorderActiveThickness)" />
                </PriorityBinding>
              </wpf:TextFieldAssist.OutlinedBorderActiveThickness>
            </DatePickerTextBox>
 
            <!-- VerticalAlignment=Center to follow the default ComboBox style where the arrow is always vertically centered. Could be problematic to try to calculate the offset because it needs to be v-centered in relation to the content of the nested TextBox -->
            <Button x:Name="PART_Button"
                    Height="16"
                    Margin="{TemplateBinding Padding, Converter={StaticResource PartButtonMarginConverter}}"
                    HorizontalAlignment="Right"
                    VerticalAlignment="Center"
                    Focusable="False"
                    Foreground="{Binding ElementName=PART_TextBox, Path=Foreground}"
                    Opacity="{TemplateBinding wpf:HintAssist.HintOpacity}"
                    Template="{StaticResource CalendarButtonTemplate}" />
            <Popup x:Name="PART_Popup"
                   AllowsTransparency="True"
                   CustomPopupPlacementCallback="{x:Static wpf:CustomPopupPlacementCallbackHelper.LargePopupCallback}"
                   Placement="Custom"
                   PlacementTarget="{Binding ElementName=PART_TextBox}"
                   PopupAnimation="Fade"
                   StaysOpen="False" />
          </Grid>
          <ControlTemplate.Triggers>
            <!-- PART_Button hovering -->
            <MultiTrigger>
              <MultiTrigger.Conditions>
                <Condition Property="IsEnabled" Value="True" />
                <Condition SourceName="PART_Button" Property="IsMouseOver" Value="True" />
              </MultiTrigger.Conditions>
              <Setter TargetName="PART_Button" Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
            </MultiTrigger>
            <Trigger Property="IsEnabled" Value="False">
              <Setter TargetName="PART_Button" Property="Opacity" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:HintAssist.HintOpacity), Converter={x:Static converters:MathConverter.MultiplyInstance}, ConverterParameter={x:Static wpf:Constants.TextBoxNotEnabledOpacity}}" />
              <Setter TargetName="PART_TextBox" Property="IsReadOnly" Value="False" />
            </Trigger>
 
            <!-- Validation.HasError -->
            <Trigger Property="Validation.HasError" Value="True">
              <Setter TargetName="PART_TextBox" Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.ValidationError}" />
              <Setter TargetName="PART_TextBox" Property="wpf:ValidationAssist.HasError" Value="True" />
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="Validation.ErrorTemplate" Value="{StaticResource MaterialDesignValidationErrorTemplate}" />
    <Setter Property="VerticalContentAlignment" Value="Stretch" />
    <Setter Property="wpf:HintAssist.HelperTextStyle" Value="{StaticResource MaterialDesignHelperTextBlock}" />
    <Setter Property="internal:ClearText.HandlesClearCommand" Value="True" />
    <Setter Property="wpf:HintAssist.Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
    <Setter Property="wpf:TextFieldAssist.TextBoxViewMargin" Value="{x:Static wpf:Constants.DefaultTextBoxViewMargin}" />
    <Setter Property="wpf:TextFieldAssist.UnderlineBrush" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
  </Style>
 
  <Style x:Key="MaterialDesignFloatingHintDatePicker"
         TargetType="{x:Type DatePicker}"
         BasedOn="{StaticResource MaterialDesignDatePicker}">
    <Style.Resources>
      <Style x:Key="NestedTextBoxStyle" TargetType="DatePickerTextBox" BasedOn="{StaticResource MaterialDesignFloatingHintTextBox}" />
    </Style.Resources>
    <Setter Property="wpf:HintAssist.IsFloating" Value="True" />
    <Setter Property="Padding" Value="{x:Static wpf:Constants.FloatingTextBoxDefaultPadding}" />
  </Style>
 
  <Style x:Key="MaterialDesignFilledDatePicker"
         TargetType="{x:Type DatePicker}"
         BasedOn="{StaticResource MaterialDesignFloatingHintDatePicker}">
    <Style.Resources>
      <Style x:Key="NestedTextBoxStyle" TargetType="DatePickerTextBox" BasedOn="{StaticResource MaterialDesignFilledTextBox}" />
    </Style.Resources>
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.TextBox.FilledBackground}" />
    <Setter Property="Padding" Value="{x:Static wpf:Constants.FilledTextBoxDefaultPadding}" />
    <Setter Property="wpf:TextFieldAssist.HasFilledTextField" Value="True" />
    <Setter Property="wpf:TextFieldAssist.TextFieldCornerRadius" Value="4,4,0,0" />
    <Setter Property="wpf:TextFieldAssist.UnderlineCornerRadius" Value="0" />
  </Style>
 
  <Style x:Key="MaterialDesignOutlinedDatePicker"
         TargetType="{x:Type DatePicker}"
         BasedOn="{StaticResource MaterialDesignFloatingHintDatePicker}">
    <Style.Resources>
      <Style x:Key="NestedTextBoxStyle" TargetType="DatePickerTextBox" BasedOn="{StaticResource MaterialDesignOutlinedTextBox}" />
    </Style.Resources>
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.TextBox.OutlineBorder}" />
    <Setter Property="BorderThickness" Value="{x:Static wpf:Constants.DefaultOutlinedBorderInactiveThickness}" />
    <Setter Property="Padding" Value="{x:Static wpf:Constants.OutlinedTextBoxDefaultPadding}" />
    <Setter Property="wpf:TextFieldAssist.HasOutlinedTextField" Value="True" />
    <Setter Property="wpf:TextFieldAssist.TextFieldCornerRadius" Value="4" />
  </Style>
 
</ResourceDictionary>