WPF-DatePicker样式UI及相关注意事项

<!--#region DatePicker样式-->
    <!--时间控件查询-->
    <Style x:Key="DatePickerStyle" TargetType="{x:Type DatePicker}">
        <Setter Property="Foreground" Value="White"/>
        <Setter Property="IsTodayHighlighted" Value="True"/>
        <Setter Property="SelectedDateFormat" Value="Short"/>
        <Setter Property="Background" Value="#1c2535"/>
        <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="0"/>
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        <Setter Property="CalendarStyle" Value="{DynamicResource CalendarStyle_4}"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DatePicker}">
                    <Border BorderBrush="#3b5a8a" CornerRadius="2" BorderThickness="0" 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>
                                        <Image x:Name="Img" Source="pack://application:,,,/NewCross.APMP.Branch.MainFramework;component/Resources/Duty/日历.png"/>
                                    </Grid>
                                    <ControlTemplate.Triggers>
                                        <Trigger Property="IsMouseOver" Value="True">
                                            <Setter TargetName="Img" Property="Source" Value="pack://application:,,,/NewCross.APMP.Branch.MainFramework;component/Resources/Duty/日历_选中.png"/>
                                        </Trigger>
                                    </ControlTemplate.Triggers>
                                </ControlTemplate>
                            </Grid.Resources>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="Auto"/>
                            </Grid.ColumnDefinitions>
                            <Button x:Name="PART_Button" Grid.Column="1" Foreground="{TemplateBinding Foreground}" Focusable="False" HorizontalAlignment="Left" Margin="3,0,3,0" Grid.Row="0" Template="{StaticResource DropDownButtonTemplate}" VerticalAlignment="Top" Width="20"/>
                            <DatePickerTextBox x:Name="PART_TextBox" Foreground="White" Background="#202d44" Grid.Column="0" Focusable="{TemplateBinding Focusable}" HorizontalContentAlignment="Stretch" Grid.Row="0" VerticalContentAlignment="Stretch" Style="{DynamicResource DatePickerTextBoxStyle}"/>
                            <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>
    <Style x:Key="DatePickerTextBoxStyle" TargetType="{x:Type DatePickerTextBox}">
        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/>
        <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
        <Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/>
        <Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DatePickerTextBox}">
                    <Grid>
                        <Grid.Resources>
                            <SolidColorBrush x:Key="WatermarkBrush" Color="#FFAAAAAA"/>
                        </Grid.Resources>
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualStateGroup.Transitions>
                                    <VisualTransition GeneratedDuration="0"/>
                                    <VisualTransition GeneratedDuration="0:0:0.1" To="MouseOver"/>
                                </VisualStateGroup.Transitions>
                                <VisualState x:Name="Normal"/>
                                <VisualState x:Name="MouseOver">
                                    <Storyboard>
                                        <ColorAnimation Duration="0" To="#FF99C1E2" Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" Storyboard.TargetName="ContentElement"/>
                                        <ColorAnimation Duration="0" To="#FF99C1E2" Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" Storyboard.TargetName="watermark_decorator"/>
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                            <VisualStateGroup x:Name="WatermarkStates">
                                <VisualStateGroup.Transitions>
                                    <VisualTransition GeneratedDuration="0"/>
                                </VisualStateGroup.Transitions>
                                <VisualState x:Name="Unwatermarked"/>
                                <VisualState x:Name="Watermarked">
                                    <Storyboard>
                                        <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="ContentElement"/>
                                        <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="PART_Watermark"/>
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                            <VisualStateGroup x:Name="FocusStates">
                                <VisualStateGroup.Transitions>
                                    <VisualTransition GeneratedDuration="0"/>
                                </VisualStateGroup.Transitions>
                                <VisualState x:Name="Unfocused"/>
                                <VisualState x:Name="Focused">
                                    <Storyboard>
                                        <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="FocusVisual"/>
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                        <Border x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="0" Background="#202d44" CornerRadius="1" Opacity="1" Padding="3,2,0,0">
                            <Grid x:Name="WatermarkContent" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
                                <Border x:Name="ContentElement" BorderBrush="#FFFFFFFF" BorderThickness="0"/>
                                <Border x:Name="watermark_decorator" BorderBrush="#FFFFFFFF" BorderThickness="0">
                                    <ContentControl x:Name="PART_Watermark" Focusable="False" IsHitTestVisible="False" Opacity="0" Padding="2"/>
                                </Border>
                                <ScrollViewer x:Name="PART_ContentHost" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="0" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
                                <Border x:Name="FocusVisual" BorderBrush="#FF45D6FA" CornerRadius="1" IsHitTestVisible="False" Opacity="0"/>
                            </Grid>
                        </Border>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style x:Key="DatePickerStyle2" 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="CalendarStyle" Value="{DynamicResource CalendarStyle_4}"/>
        <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>
                                        <Grid>
                                            <Image x:Name="Img" Height="22" Width="22" Source="pack://application:,,,/NewCross.APMP.Branch.MainFramework;component/Resources/Duty/日历.png"/>
                                        </Grid>
                                    </Grid>
                                    <ControlTemplate.Triggers>
                                        <Trigger Property="IsMouseOver" Value="True">
                                            <Setter TargetName="Img" Property="Source" Value="pack://application:,,,/NewCross.APMP.Branch.MainFramework;component/Resources/Duty/日历_选中.png"/>
                                        </Trigger>
                                    </ControlTemplate.Triggers>
                                </ControlTemplate>
                            </Grid.Resources>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="Auto"/>
                            </Grid.ColumnDefinitions>
                            <Button x:Name="PART_Button" Grid.Column="1" Foreground="{TemplateBinding Foreground}" Focusable="False" HorizontalAlignment="Left" Margin="1,0,3,0" Grid.Row="0" Template="{StaticResource DropDownButtonTemplate}" VerticalAlignment="Top" Width="23"/>
                            <DatePickerTextBox x:Name="PART_TextBox"  Grid.Column="0" Focusable="{TemplateBinding Focusable}" HorizontalContentAlignment="Stretch" Grid.Row="0" VerticalContentAlignment="Stretch"/>
                            <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="22" Width="22" Margin="0,0,0,0" RadiusY="1" Grid.Row="0" RadiusX="1"/>
                                <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>
    <!--#endregion DatePicker样式-->

===============

  1 <!--Region  Datepicker、Calendar样式4-->
  2     <Style x:Key="DatePickerStyle_4" TargetType="{x:Type DatePicker}">
  3         <Setter Property="Foreground" Value="White"/>
  4         <Setter Property="IsTodayHighlighted" Value="True"/>
  5         <Setter Property="SelectedDateFormat" Value="Short"/>
  6         <Setter Property="Background" Value="#202d44"/>
  7         <Setter Property="Padding" Value="2"/>
  8         <Setter Property="BorderBrush">
  9             <Setter.Value>
 10                 <LinearGradientBrush EndPoint=".5,0" StartPoint=".5,1">
 11                     <GradientStop Color="#FFA3AEB9" Offset="0"/>
 12                     <GradientStop Color="#FF8399A9" Offset="0.375"/>
 13                     <GradientStop Color="#FF718597" Offset="0.375"/>
 14                     <GradientStop Color="#FF617584" Offset="1"/>
 15                 </LinearGradientBrush>
 16             </Setter.Value>
 17         </Setter>
 18         <Setter Property="BorderThickness" Value="0"/>
 19         <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
 20         <Setter Property="Template">
 21             <Setter.Value>
 22                 <ControlTemplate TargetType="{x:Type DatePicker}">
 23                     <Border BorderBrush="#3b5a8a" CornerRadius="2" BorderThickness="0" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" 
 24                             >
 25                         <VisualStateManager.VisualStateGroups>
 26                             <VisualStateGroup x:Name="CommonStates">
 27                                 <VisualState x:Name="Normal"/>
 28                                 <VisualState x:Name="Disabled">
 29                                     <Storyboard>
 30                                         <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="PART_DisabledVisual"/>
 31                                     </Storyboard>
 32                                 </VisualState>
 33                             </VisualStateGroup>
 34                         </VisualStateManager.VisualStateGroups>
 35                         <Grid x:Name="PART_Root" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
 36                             <Grid.Resources>
 37                                 <!--<SolidColorBrush x:Key="DisabledBrush" Color="#A5FFFFFF"/>-->
 38                                 <ControlTemplate x:Key="DropDownButtonTemplate" TargetType="{x:Type Button}">
 39                                     <Grid>
 40                                         <Image x:Name="Img" Source="pack://application:,,,/NewCross.APMP.Branch.MainFramework;component/Resources/Duty/日历.png"/>
 41                                     </Grid>
 42                                     <ControlTemplate.Triggers>
 43                                         <Trigger Property="IsMouseOver" Value="True">
 44                                             <Setter TargetName="Img" Property="Source" Value="pack://application:,,,/NewCross.APMP.Branch.MainFramework;component/Resources/Duty/日历_选中.png"/>
 45                                         </Trigger>
 46                                     </ControlTemplate.Triggers>
 47                                 </ControlTemplate>
 48                             </Grid.Resources>
 49                             <Grid.ColumnDefinitions>
 50                                 <ColumnDefinition Width="*"/>
 51                                 <ColumnDefinition Width="Auto"/>
 52                             </Grid.ColumnDefinitions>
 53                             <Button x:Name="PART_Button" Grid.Column="1" Foreground="{TemplateBinding Foreground}" Focusable="False" HorizontalAlignment="Left" Margin="3,0,3,0" Grid.Row="0" Template="{StaticResource DropDownButtonTemplate}" VerticalAlignment="Top" Width="20"/>
 54                             <DatePickerTextBox x:Name="PART_TextBox" Foreground="White" Background="#202d44" Grid.Column="0" Focusable="{TemplateBinding Focusable}" HorizontalContentAlignment="Stretch" Grid.Row="0" VerticalContentAlignment="Stretch" Style="{DynamicResource DatePickerTextBoxStyle}"/>
 55                             <Grid x:Name="PART_DisabledVisual" Grid.ColumnSpan="2" Grid.Column="0" IsHitTestVisible="False" Opacity="0" Grid.Row="0">
 56                                 <Grid.ColumnDefinitions>
 57                                     <ColumnDefinition Width="*"/>
 58                                     <ColumnDefinition Width="Auto"/>
 59                                 </Grid.ColumnDefinitions>
 60                                 <Rectangle Grid.Column="0" Fill="#A5FFFFFF" RadiusY="1" Grid.Row="0" RadiusX="1"/>
 61                                 <Rectangle Grid.Column="1" Fill="#A5FFFFFF" Height="18" Margin="3,0,3,0" RadiusY="1" Grid.Row="0" RadiusX="1" Width="19"/>
 62                                 <Popup x:Name="PART_Popup" AllowsTransparency="True" Placement="Bottom" PlacementTarget="{Binding ElementName=PART_TextBox}" StaysOpen="False"/>
 63                             </Grid>
 64                         </Grid>
 65                     </Border>
 66                     <ControlTemplate.Triggers>
 67                         <DataTrigger Binding="{Binding Source={x:Static SystemParameters.HighContrast}}" Value="false">
 68                             <Setter Property="Foreground" TargetName="PART_TextBox" Value="{Binding Foreground, RelativeSource={RelativeSource TemplatedParent}}"/>
 69                         </DataTrigger>
 70                     </ControlTemplate.Triggers>
 71                 </ControlTemplate>
 72             </Setter.Value>
 73         </Setter>
 74         <Setter Property="CalendarStyle" Value="{DynamicResource CalendarStyle_4}">
 75             <!--<Setter.Value>
 76                 <Style TargetType="{x:Type Calendar}">
 77                     <Setter Property="SnapsToDevicePixels" Value="True" />
 78                     <Setter Property="Foreground" Value="Red" />
 79                     <Setter Property="CalendarDayButtonStyle" Value="{DynamicResource CalendarDayButtonStyle_4}" />
 80                     <Setter Property="CalendarItemStyle" Value="{DynamicResource CalendarItemStyle_4}" />
 81                     <Setter Property="CalendarButtonStyle" Value="{DynamicResource CalendarButtonStyle_4}" />
 82                     <Setter Property="Background" Value="Transparent" />
 83                     <Setter Property="BorderBrush" Value="Transparent" />
 84                     <Setter Property="BorderThickness" Value="1" />
 85                     <Setter Property="FontSize" Value="5" /> 
 86                     <Setter Property="IsTodayHighlighted" Value="True" />
 87                     <Setter Property="Template">
 88                         <Setter.Value>
 89                             <ControlTemplate TargetType="{x:Type Calendar}">
 90                                 <StackPanel x:Name="PART_Root" HorizontalAlignment="Center" Background="Transparent">
 91                                     <CalendarItem x:Name="PART_CalendarItem" BorderBrush="{TemplateBinding BorderBrush}" FontSize="{TemplateBinding FontSize}"
 92                                       FontFamily="{TemplateBinding FontFamily}"
 93                                       BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}"
 94                                       Style="{TemplateBinding CalendarItemStyle}" />
 95                                 </StackPanel>
 96                             </ControlTemplate>
 97                         </Setter.Value>
 98                     </Setter>
 99                 </Style>
100             </Setter.Value>-->
101         </Setter>
102     </Style>
103     <!--Day按钮样式-->
104     <Style x:Key="CalendarDayButtonStyle_4" TargetType="{x:Type CalendarDayButton}">
105         <!--<Setter Property="MinWidth" Value="28" />
106         <Setter Property="MinHeight" Value="5" />-->
107         <!--<Setter Property="FontFamily" Value="{StaticResource FontFamily}" />-->
108         <Setter Property="HorizontalContentAlignment" Value="Center" />
109         <Setter Property="VerticalContentAlignment" Value="Center" />
110         <Setter Property="Background" Value="Transparent" />
111         <Setter Property="Foreground" Value="White" />
112         <Setter Property="Margin" Value="0" />
113         <Setter Property="IsTabStop" Value="False" />
114         <Setter Property="Template">
115             <Setter.Value>
116                 <ControlTemplate TargetType="{x:Type CalendarDayButton}">
117                     <Grid x:Name="Grid" Margin="{TemplateBinding Margin}">
118                         <Border x:Name="Bg"  Background="{TemplateBinding Background}" />
119 
120                         <ContentPresenter x:Name="NormalText" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="5,2,5,2" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
121                                           TextElement.Foreground="{TemplateBinding Foreground}" />
122                     </Grid>
123                     <ControlTemplate.Triggers>
124                         <Trigger Property="IsSelected" Value="True">
125                             <!--<Setter TargetName="Bg" Property="CornerRadius" Value="6"></Setter>-->
126                             <Setter Property="Background" Value="White"></Setter>
127                             <Setter Property="Foreground" Value="#016B77"></Setter>
128                         </Trigger>
129                         <Trigger Property="IsToday" Value="True">
130                             <!--<Setter TargetName="Bg" Property="CornerRadius" Value="6"></Setter>-->
131                             <Setter Property="Background" Value="#016B77"></Setter>
132                             <Setter Property="Foreground" Value="White"></Setter>
133                         </Trigger>
134                         <Trigger Property="IsMouseOver" Value="True">
135                             <!--<Setter TargetName="Bg" Property="CornerRadius" Value="6"></Setter>-->
136                             <!--<Setter TargetName="Bg" Property="BorderThickness" Value="0.5"></Setter>-->
137                             <!--<Setter TargetName="Bg" Property="BorderBrush" Value="Yellow"></Setter>-->
138                             <Setter Property="Background" Value="LightBlue"></Setter>
139                             <!--<Setter Property="Foreground" Value="Green"></Setter>-->
140                         </Trigger>
141                         <!--不可用日期-->
142                         <Trigger Property="IsBlackedOut" Value="True">
143                             <Setter Property="Opacity" Value="0.5" TargetName="Grid"></Setter>
144                         </Trigger>
145                         <!--不在当月的日期-->
146                         <Trigger Property="IsInactive" Value="True">
147                             <Setter Property="Opacity" Value="0.5" TargetName="Grid"></Setter>
148                         </Trigger>
149                         <Trigger Property="IsEnabled" Value="False">
150                             <Setter Property="Opacity" Value="0.8" TargetName="Grid"></Setter>
151                         </Trigger>
152                     </ControlTemplate.Triggers>
153                 </ControlTemplate>
154             </Setter.Value>
155         </Setter>
156     </Style>
157     <!--日历日期面板样式-->
158     <Style x:Key="CalendarItemStyle_4" TargetType="{x:Type CalendarItem}">
159         <Setter Property="Margin" Value="0,1,0,1" />
160         <Setter Property="Background" Value="#016B77"/>
161         <Setter Property="Template">
162             <Setter.Value>
163                 <ControlTemplate TargetType="{x:Type CalendarItem}">
164                     <ControlTemplate.Resources>
165                         <!-- 头部星期样式-->
166                         <DataTemplate x:Key="{x:Static CalendarItem.DayTitleTemplateResourceKey}">
167                             <TextBlock Text="{Binding}" FontSize="10" FontWeight="Bold" Margin="6,5,0,3" Opacity="0.8" Foreground="White"/>
168                         </DataTemplate>
169                     </ControlTemplate.Resources>
170                     <Grid x:Name="PART_Root">
171                         <Grid.Resources>
172                             <!--设置日历控件 IsEnable=false 时的不可用遮罩层颜色,并且会播放过渡动画-->
173                             <SolidColorBrush x:Key="DisabledColor" Color="#A5FFFFFF" />
174                         </Grid.Resources>
175                         <VisualStateManager.VisualStateGroups>
176                             <VisualStateGroup x:Name="CommonStates">
177                                 <VisualState x:Name="Normal" />
178                                 <VisualState x:Name="Disabled">
179                                     <!--设置日历控件 IsEnable=false 时遮罩层透明度0-1变色动画-->
180                                     <Storyboard>
181                                         <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="PART_DisabledVisual" />
182                                     </Storyboard>
183                                 </VisualState>
184                             </VisualStateGroup>
185                         </VisualStateManager.VisualStateGroups>
186 
187                         <Border BorderBrush="#cfcfcf" BorderThickness="0" Background="{TemplateBinding Background}" CornerRadius="2">
188                             <Grid>
189                                 <Grid.Resources>
190                                     <!--日历头左箭头按钮样式模版-->
191                                     <ControlTemplate x:Key="PreviousButtonTemplate" TargetType="{x:Type Button}">
192                                         <!--鼠标悬停在左箭头按钮上时改变鼠标指针样式-->
193                                         <Grid Cursor="Hand">
194                                             <VisualStateManager.VisualStateGroups>
195                                                 <VisualStateGroup x:Name="CommonStates">
196                                                     <VisualState x:Name="Normal" />
197                                                     <VisualState x:Name="MouseOver">
198                                                         <!--鼠标悬停在左箭头按钮上时左箭头颜色变化动画-->
199                                                         <Storyboard>
200                                                             <ColorAnimation Duration="0" To="#FF73A9D8" Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="path" />
201                                                         </Storyboard>
202                                                     </VisualState>
203                                                     <VisualState x:Name="Disabled">
204                                                         <Storyboard>
205                                                             <DoubleAnimation Duration="0" To=".5" Storyboard.TargetProperty="(Shape.Fill).(Brush.Opacity)"  Storyboard.TargetName="path" />
206                                                         </Storyboard>
207                                                     </VisualState>
208                                                 </VisualStateGroup>
209                                             </VisualStateManager.VisualStateGroups>
210                                             <!--左箭头整个区域矩形块-->
211                                             <Rectangle Fill="#016B77" Opacity="1" Stretch="Fill" />
212                                             <Grid>
213                                                 <!--左箭头-->
214                                                 <Path x:Name="path"  Data="M288.75,232.25 L288.75,240.625 L283,236.625 z"  Fill="#e0e0e0" HorizontalAlignment="Left"
215                                                               Height="8"  Width="8"  Margin="10,2,0,0"  Stretch="Fill" VerticalAlignment="Center" />
216                                             </Grid>
217                                         </Grid>
218                                     </ControlTemplate>
219                                     <!--日历头右箭头按钮样式模版,这块跟左箭头样式模版没什么区别-->
220                                     <ControlTemplate x:Key="NextButtonTemplate" TargetType="{x:Type Button}">
221                                         <Grid Cursor="Hand">
222                                             <VisualStateManager.VisualStateGroups>
223                                                 <VisualStateGroup x:Name="CommonStates">
224                                                     <VisualState x:Name="Normal" />
225                                                     <VisualState x:Name="MouseOver">
226                                                         <Storyboard>
227                                                             <ColorAnimation Duration="0" To="#FF73A9D8" Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"  Storyboard.TargetName="path" />
228                                                         </Storyboard>
229                                                     </VisualState>
230                                                     <VisualState x:Name="Disabled">
231                                                         <Storyboard>
232                                                             <DoubleAnimation Duration="0" To=".5" Storyboard.TargetProperty="(Shape.Fill).(Brush.Opacity)" Storyboard.TargetName="path" />
233                                                         </Storyboard>
234                                                     </VisualState>
235                                                 </VisualStateGroup>
236                                             </VisualStateManager.VisualStateGroups>
237                                             <Rectangle Fill="#016B77" Opacity="1" Stretch="Fill" />
238                                             <Grid>
239                                                 <Path x:Name="path" Data="M282.875,231.875 L282.875,240.375 L288.625,236 z" Fill="#e0e0e0" HorizontalAlignment="Right"
240                                                               Height="8" Width="8" Margin="0,2,10,0" Stretch="Fill" VerticalAlignment="Center" />
241                                             </Grid>
242                                         </Grid>
243                                     </ControlTemplate>
244                                     <!--日历头中间年按钮样式模版-->
245                                     <ControlTemplate x:Key="HeaderButtonTemplate" TargetType="{x:Type Button}">
246                                         <Grid Cursor="Hand">
247                                             <VisualStateManager.VisualStateGroups>
248                                                 <VisualStateGroup x:Name="CommonStates">
249                                                     <VisualState x:Name="Normal" />
250                                                     <VisualState x:Name="MouseOver">
251                                                         <Storyboard>
252                                                             <ColorAnimation Duration="0" To="#FF73A9D8" Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)" Storyboard.TargetName="buttonContent" />
253                                                         </Storyboard>
254                                                     </VisualState>
255                                                     <VisualState x:Name="Disabled">
256                                                         <Storyboard>
257                                                             <DoubleAnimation Duration="0" To=".5" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="buttonContent" />
258                                                         </Storyboard>
259                                                     </VisualState>
260                                                 </VisualStateGroup>
261                                             </VisualStateManager.VisualStateGroups>
262                                             <ContentPresenter x:Name="buttonContent" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" TextElement.Foreground="#e0e0e0"
263                                                                       HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="1,3,1,1" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
264                                         </Grid>
265                                     </ControlTemplate>
266                                 </Grid.Resources>
267 
268                                 <Grid.RowDefinitions>
269                                     <!--日历头,左箭头,年,右箭头-->
270                                     <RowDefinition Height="Auto" />
271                                     <!--日历内容,星期几和具体的日期几号几号-->
272                                     <RowDefinition Height="*" />
273                                 </Grid.RowDefinitions>
274                                 <Grid.ColumnDefinitions>
275                                     <!--左箭头-->
276                                     <ColumnDefinition Width="Auto" />
277                                     <!---->
278                                     <ColumnDefinition Width="*" />
279                                     <!--右箭头-->
280                                     <ColumnDefinition Width="Auto" />
281                                 </Grid.ColumnDefinitions>
282                                 <!--头,左箭头,年,右箭头,整体的背景色-->
283                                 <Border Grid.Row="0" Grid.ColumnSpan="3" Background="#016B77"></Border>
284                                 <!--左箭头-->
285                                 <Button x:Name="PART_PreviousButton" Grid.Column="0" Focusable="False" HorizontalAlignment="Left" Grid.Row="0"
286                                                 Template="{StaticResource PreviousButtonTemplate}" />
287                                 <!---->
288                                 <Button x:Name="PART_HeaderButton" Grid.Column="1" FontFamily="微软雅黑" Focusable="False" FontSize="12"
289                                                 HorizontalAlignment="Center"  Grid.Row="0" Template="{StaticResource HeaderButtonTemplate}" VerticalAlignment="Center" />
290                                 <!--右箭头-->
291                                 <Button x:Name="PART_NextButton"  Grid.Column="2"  Focusable="False"
292                                                 HorizontalAlignment="Right" Grid.Row="0" Template="{StaticResource NextButtonTemplate}" />
293                                 <!--日期几号几号内容显示-->
294                                 <Border Grid.Row="1" Grid.ColumnSpan="3" Margin="0" BorderBrush="Transparent" BorderThickness="0" Background="Transparent">
295                                     <Grid x:Name="PART_MonthView" HorizontalAlignment="Center" Visibility="Visible">
296                                         <Grid.ColumnDefinitions>
297                                             <ColumnDefinition Width="*" />
298                                             <ColumnDefinition Width="*" />
299                                             <ColumnDefinition Width="*" />
300                                             <ColumnDefinition Width="*" />
301                                             <ColumnDefinition Width="*" />
302                                             <ColumnDefinition Width="*" />
303                                             <ColumnDefinition Width="*" />
304                                         </Grid.ColumnDefinitions>
305                                         <Grid.RowDefinitions>
306                                             <RowDefinition Height="auto" />
307                                             <RowDefinition Height="*" />
308                                             <RowDefinition Height="*" />
309                                             <RowDefinition Height="*" />
310                                             <RowDefinition Height="*" />
311                                             <RowDefinition Height="*" />
312                                             <RowDefinition Height="*" />
313                                         </Grid.RowDefinitions>
314                                     </Grid>
315                                 </Border>
316 
317                                 <!--月和年内容显示-->
318                                 <Grid x:Name="PART_YearView" Grid.ColumnSpan="3"  HorizontalAlignment="Center" Grid.Row="1" Visibility="Hidden" VerticalAlignment="Center">
319                                     <Grid.ColumnDefinitions>
320                                         <ColumnDefinition Width="*" />
321                                         <ColumnDefinition Width="*" />
322                                         <ColumnDefinition Width="*" />
323                                         <ColumnDefinition Width="*" />
324                                     </Grid.ColumnDefinitions>
325                                     <Grid.RowDefinitions>
326                                         <RowDefinition Height="*" />
327                                         <RowDefinition Height="*" />
328                                         <RowDefinition Height="*" />
329                                     </Grid.RowDefinitions>
330                                 </Grid>
331                             </Grid>
332                         </Border>
333                         <!--日历不可用的遮罩层-->
334                         <Rectangle x:Name="PART_DisabledVisual"  Fill="{StaticResource DisabledColor}" Opacity="0" RadiusY="2" RadiusX="2" Stretch="Fill"
335                                        Stroke="{StaticResource DisabledColor}" StrokeThickness="1" Visibility="Collapsed" />
336                     </Grid>
337                     <ControlTemplate.Triggers>
338                         <Trigger Property="IsEnabled" Value="False">
339                             <Setter Property="Opacity" TargetName="PART_Root" Value="0.65" />
340                         </Trigger>
341                         <DataTrigger Binding="{Binding DisplayMode, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Calendar}}}" Value="Year">
342                             <Setter Property="Visibility" TargetName="PART_MonthView" Value="Hidden" />
343                             <Setter Property="Visibility" TargetName="PART_YearView" Value="Visible" />
344                         </DataTrigger>
345                         <!--Decade 美 ['dɛked] n. 十年,十年期;十-->
346                         <DataTrigger Binding="{Binding DisplayMode, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Calendar}}}" Value="Decade">
347                             <Setter Property="Visibility" TargetName="PART_MonthView" Value="Hidden" />
348                             <Setter Property="Visibility" TargetName="PART_YearView" Value="Visible" />
349                         </DataTrigger>
350                     </ControlTemplate.Triggers>
351                 </ControlTemplate>
352             </Setter.Value>
353         </Setter>
354     </Style>
355     <!--年、月按钮样式-->
356     <Style x:Key="CalendarButtonStyle_4" TargetType="{x:Type CalendarButton}">
357         <Setter Property="Background" Value="Transparent" />
358         <Setter Property="HorizontalContentAlignment" Value="Center" />
359         <Setter Property="VerticalContentAlignment" Value="Center" />
360         <Setter Property="Template">
361             <Setter.Value>
362                 <ControlTemplate TargetType="{x:Type CalendarButton}">
363                     <Grid x:Name="Grid" Margin="{TemplateBinding Margin}">
364                         <Border x:Name="Bg" Background="{TemplateBinding Background}" />
365                         <ContentPresenter x:Name="NormalText" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
366                                           Margin="5,2,5,2" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
367                                           TextElement.Foreground="{TemplateBinding Foreground}" />
368                     </Grid>
369                     <ControlTemplate.Triggers>
370                         <Trigger Property="IsFocused" Value="True">
371                             <Setter Property="Background" Value="#016B77" ></Setter>
372                             <Setter Property="Foreground" Value="White"></Setter>
373                         </Trigger>
374                         <Trigger Property="IsMouseOver" Value="True">
375                             <Setter Property="Background" Value="LightBlue" ></Setter>
376                             <!--<Setter Property="Foreground" Value="White"></Setter>-->
377                         </Trigger>
378                         <!--不在当月的日期-->
379                         <Trigger Property="IsInactive" Value="True">
380                             <Setter Property="Opacity" Value="0.5" TargetName="Grid"></Setter>
381                         </Trigger>
382                         <Trigger Property="IsEnabled" Value="False">
383                             <Setter Property="Opacity" Value="0.8" TargetName="Grid"></Setter>
384                         </Trigger>
385                     </ControlTemplate.Triggers>
386                 </ControlTemplate>
387             </Setter.Value>
388         </Setter>
389     </Style>
390     <ImageBrush x:Key="bg_Calendar" ImageSource="pack://application:,,,/NewCross.APMP.Branch.MainFramework;component/Resources/Duty/日历背景.png" Stretch="Fill"/>
391     <Style x:Key="CalendarStyle_4" TargetType="Calendar">
392         <Setter Property="SnapsToDevicePixels" Value="True" />
393         <Setter Property="Foreground" Value="White" />
394         <Setter Property="CalendarDayButtonStyle" Value="{DynamicResource CalendarDayButtonStyle_4}" />
395         <Setter Property="CalendarItemStyle" Value="{DynamicResource CalendarItemStyle_4}" />
396         <Setter Property="CalendarButtonStyle" Value="{DynamicResource CalendarButtonStyle_4}" />
397         <!--<Setter Property="Background" Value="#1AAEB7" />-->
398         <Setter Property="Background" Value="{DynamicResource bg_Calendar}" />
399         <Setter Property="BorderBrush" Value="#35405a" />
400         <Setter Property="BorderThickness" Value="0" />
401         <Setter Property="FontSize" Value="10" />
402         <Setter Property="IsTodayHighlighted" Value="True" />
403         <Setter Property="Template">
404             <Setter.Value>
405                 <ControlTemplate TargetType="{x:Type Calendar}">
406                     <StackPanel x:Name="PART_Root" HorizontalAlignment="Center" Background="Transparent">
407                         <CalendarItem x:Name="PART_CalendarItem" BorderBrush="{TemplateBinding BorderBrush}" FontSize="{TemplateBinding FontSize}" Foreground="{TemplateBinding Foreground}"
408                             BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}"
409                            Style="{TemplateBinding CalendarItemStyle}" >
410                         </CalendarItem>
411                     </StackPanel>
412                 </ControlTemplate>
413             </Setter.Value>
414         </Setter>
415     </Style>
416     <!--EndRegion  Datepicker、Calendar样式4-->
View Code

===============相关注意事项===============

=====1、上述样式来源http://www.cnblogs.com/anding

=====2、如果需要对日期等格式化,请参考以下对“DatePickerTextBox”样式的调整。因为默认的样式会受到系统日期格式的影响

 1 <Border x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="0" Background="#162133" CornerRadius="1" Opacity="1" Padding="{TemplateBinding Padding}">
 2                                     <Grid x:Name="WatermarkContent" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
 3                                         <Border x:Name="ContentElement" BorderBrush="#FFFFFFFF" BorderThickness="0"/>
 4                                         <Border x:Name="watermark_decorator" BorderBrush="#FFFFFFFF" BorderThickness="0">
 5                                             <!--<ContentControl x:Name="PART_Watermark" Focusable="False" IsHitTestVisible="False" Opacity="0" Padding="2"/>-->
 6                                             <TextBox x:Name="PART_Watermark" Text="{Binding Path=SelectedDate, StringFormat='yyyy/MM/dd', RelativeSource={RelativeSource AncestorType=DatePicker}}" Background="Transparent" Foreground="White" BorderThickness="0"/>
 7                                         </Border>
 8                                         <!--使用ScrollViewer 会出现默认系统日期格式-->
 9                                         <!--<ScrollViewer x:Name="PART_ContentHost" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="0" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>-->
10                                         <Border x:Name="FocusVisual" BorderBrush="#FF45D6FA" CornerRadius="1" IsHitTestVisible="False" Opacity="0"/>
11                                     </Grid>
12                                 </Border>
View Code
原文地址:https://www.cnblogs.com/xbj-hyml/p/10653618.html