wpf自定义日期控件
转载:https://www.cnblogs.com/lanymy/archive/2013/03/07/2948509.html
前端
<UserControl x:Class="UserCtl.BaseControl.DatePic"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="35" d:DesignWidth="120" >
<UserControl.Resources>
<!--日历主体样式表-->
<Style x:Key="CalendarItemStyle1"
TargetType="{x:Type CalendarItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type CalendarItem}">
<ControlTemplate.Resources>
<DataTemplate x:Key="{x:Static CalendarItem.DayTitleTemplateResourceKey}">
<!--日历星期几的绑定样式,我格式化成周一,周二等-->
<TextBlock Foreground="#666666"
FontSize="16"
FontFamily="微软雅黑"
HorizontalAlignment="Center"
Margin="0 15"
Text="{Binding StringFormat=周{0} }"
VerticalAlignment="Center" />
</DataTemplate>
</ControlTemplate.Resources>
<Grid x:Name="PART_Root">
<Grid.Resources>
<!--设置日历控件 IsEnable=false 时的不可用遮罩层颜色,并且会播放过渡动画-->
<SolidColorBrush x:Key="DisabledColor"
Color="#A5FFFFFF" />
</Grid.Resources>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="Disabled">
<!--设置日历控件 IsEnable=false 时遮罩层透明度0-1变色动画-->
<Storyboard>
<DoubleAnimation Duration="0"
To="1"
Storyboard.TargetProperty="Opacity"
Storyboard.TargetName="PART_DisabledVisual" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border BorderBrush="#cfcfcf"
BorderThickness="0"
Background="{TemplateBinding Background}"
CornerRadius="2">
<Border>
<Grid>
<Grid.Resources>
<!--日历头左箭头按钮样式模版-->
<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"
To="#FF73A9D8"
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="#363636"
Opacity="1"
Stretch="Fill" />
<Grid>
<!--左箭头-->
<Path x:Name="path"
Data="M288.75,232.25 L288.75,240.625 L283,236.625 z"
Fill="#e0e0e0"
HorizontalAlignment="Left"
Height="15"
Width="15"
Margin="20,0,0,0"
Stretch="Fill"
VerticalAlignment="Center" />
</Grid>
</Grid>
</ControlTemplate>
<!--日历头右箭头按钮样式模版,这块跟左箭头样式模版没什么区别-->
<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="#FF73A9D8"
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="#363636"
Opacity="1"
Stretch="Fill" />
<Grid>
<Path x:Name="path"
Data="M282.875,231.875 L282.875,240.375 L288.625,236 z"
Fill="#e0e0e0"
HorizontalAlignment="Right"
Height="15"
Width="15"
Margin="0,0,20,0"
Stretch="Fill"
VerticalAlignment="Center" />
</Grid>
</Grid>
</ControlTemplate>
<!--日历头中间年按钮样式模版-->
<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="#FF73A9D8"
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"
ContentTemplate="{TemplateBinding ContentTemplate}"
Content="{TemplateBinding Content}"
TextElement.Foreground="#e0e0e0"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="1,4,1,9"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
</Grid>
</ControlTemplate>
</Grid.Resources>
<Grid.RowDefinitions>
<!--日历头,左箭头,年,右箭头-->
<RowDefinition Height="Auto" />
<!--日历内容,星期几和具体的日期几号几号-->
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<!--左箭头-->
<ColumnDefinition Width="Auto" />
<!--年-->
<ColumnDefinition Width="*" />
<!--右箭头-->
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<!--头,左箭头,年,右箭头,整体的背景色-->
<Border Grid.Row="0"
Grid.ColumnSpan="3"
Background="#363636"></Border>
<!--左箭头-->
<Button x:Name="PART_PreviousButton"
Grid.Column="0"
Focusable="False"
HorizontalAlignment="Left"
Grid.Row="0"
Template="{StaticResource PreviousButtonTemplate}" />
<!--年-->
<Button x:Name="PART_HeaderButton"
Grid.Column="1"
FontFamily="微软雅黑"
Focusable="False"
FontSize="26"
HorizontalAlignment="Center"
Grid.Row="0"
Template="{StaticResource HeaderButtonTemplate}"
VerticalAlignment="Center" />
<!--右箭头-->
<Button x:Name="PART_NextButton"
Grid.Column="2"
Focusable="False"
HorizontalAlignment="Right"
Grid.Row="0"
Template="{StaticResource NextButtonTemplate}" />
<!--日期几号几号内容显示-->
<Border Grid.Row="1"
Grid.ColumnSpan="3"
Margin="0"
BorderBrush="#cfcfcf"
BorderThickness="3,0,3,3">
<Grid x:Name="PART_MonthView"
HorizontalAlignment="Center"
Visibility="Visible">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
</Grid>
</Border>
<!--月和年内容显示-->
<Grid x:Name="PART_YearView"
Grid.ColumnSpan="3"
HorizontalAlignment="Center"
Margin="6,-3,7,6"
Grid.Row="1"
Visibility="Hidden"
VerticalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</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 x:Key="CalendarDayButtonStyle1"
TargetType="{x:Type CalendarDayButton}">
<Setter Property="Margin"
Value="1" />
<Setter Property="MinWidth"
Value="5" />
<Setter Property="MinHeight"
Value="5" />
<Setter Property="FontSize"
Value="22" />
<Setter Property="FontFamily"
Value="微软雅黑" />
<Setter Property="HorizontalContentAlignment"
Value="Center" />
<Setter Property="VerticalContentAlignment"
Value="Center" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type CalendarDayButton}">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0:0:0.1" />
</VisualStateGroup.Transitions>
<VisualState x:Name="Normal" />
<!--悬停的颜色动画-->
<VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimation Duration="0"
To="0.5"
Storyboard.TargetProperty="Opacity"
Storyboard.TargetName="HighlightBackground" />
</Storyboard>
</VisualState>
<!--按下后动画-->
<VisualState x:Name="Pressed">
<Storyboard>
<DoubleAnimation Duration="0"
To="0.5"
Storyboard.TargetProperty="Opacity"
Storyboard.TargetName="HighlightBackground" />
</Storyboard>
</VisualState>
<!--不可用动画-->
<VisualState x:Name="Disabled">
<Storyboard>
<DoubleAnimation Duration="0"
To="0"
Storyboard.TargetProperty="Opacity"
Storyboard.TargetName="HighlightBackground" />
<DoubleAnimation Duration="0"
To=".35"
Storyboard.TargetProperty="Opacity"
Storyboard.TargetName="NormalText" />
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="SelectionStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0" />
</VisualStateGroup.Transitions>
<VisualState x:Name="Unselected" />
<!--选中某日期的样式-->
<VisualState x:Name="Selected">
<Storyboard>
<DoubleAnimation Duration="0"
To=".75"
Storyboard.TargetProperty="Opacity"
Storyboard.TargetName="SelectedBackground" />
<ColorAnimation Duration="0"
To="white"
Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)"
Storyboard.TargetName="NormalText" />
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="CalendarButtonFocusStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0" />
</VisualStateGroup.Transitions>
<VisualState x:Name="CalendarButtonFocused">
<Storyboard>
<ObjectAnimationUsingKeyFrames Duration="0"
Storyboard.TargetProperty="Visibility"
Storyboard.TargetName="DayButtonFocusVisual">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="CalendarButtonUnfocused">
<Storyboard>
<ObjectAnimationUsingKeyFrames Duration="0"
Storyboard.TargetProperty="Visibility"
Storyboard.TargetName="DayButtonFocusVisual">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Visibility>Collapsed</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="ActiveStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0" />
</VisualStateGroup.Transitions>
<VisualState x:Name="Active" />
<VisualState x:Name="Inactive">
<Storyboard>
<ColorAnimation Duration="0"
To="#b4b3b3"
Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)"
Storyboard.TargetName="NormalText" />
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="DayStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0" />
</VisualStateGroup.Transitions>
<VisualState x:Name="RegularDay" />
<!--今天的样式-->
<VisualState x:Name="Today">
<Storyboard>
<DoubleAnimation Duration="0"
To="1"
Storyboard.TargetProperty="Opacity"
Storyboard.TargetName="TodayBackground" />
<ColorAnimation Duration="0"
To="#666666"
Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)"
Storyboard.TargetName="NormalText" />
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility"
Storyboard.TargetName="imgToday">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
<!--过期日期的-->
<VisualStateGroup x:Name="BlackoutDayStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0" />
</VisualStateGroup.Transitions>
<VisualState x:Name="NormalDay" />
<VisualState x:Name="BlackoutDay">
<Storyboard>
<DoubleAnimation Duration="0"
To=".2"
Storyboard.TargetProperty="Opacity"
Storyboard.TargetName="Blackout" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border BorderBrush="#bbbbbb"
BorderThickness="1">
<Border BorderBrush="white"
BorderThickness="2,2,0,0"
Margin="1,1,0,0"></Border>
</Border>
<Rectangle x:Name="TodayBackground"
Fill="#c6c6c6"
Opacity="0"
RadiusY="1"
RadiusX="1" />
<Rectangle x:Name="SelectedBackground"
Fill="#6eafbf"
Opacity="0"
RadiusY="1"
RadiusX="1" />
<Border BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}" />
<Rectangle x:Name="HighlightBackground"
Fill="#FFBADDE9"
Opacity="0"
RadiusY="1"
RadiusX="1" />
<ContentPresenter x:Name="NormalText"
TextElement.Foreground="#666666"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
<Path x:Name="Blackout"
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"
Fill="#FF000000"
HorizontalAlignment="Stretch"
Margin="3"
Opacity="0"
RenderTransformOrigin="0.5,0.5"
Stretch="Fill"
VerticalAlignment="Stretch" />
<Rectangle x:Name="DayButtonFocusVisual"
IsHitTestVisible="false"
RadiusY="1"
RadiusX="1"
Stroke="#FF45D6FA"
Visibility="Collapsed" />
<Image x:Name="imgToday"
Width="44"
Height="34"
Source="/Images/Today.png"
VerticalAlignment="Top"
HorizontalAlignment="Left"
Visibility="Hidden" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="CalendarButtonStyle1"
TargetType="{x:Type CalendarButton}">
<Setter Property="Background"
Value="#FFBADDE9" />
<Setter Property="MinWidth"
Value="80" />
<Setter Property="MinHeight"
Value="80" />
<Setter Property="Margin"
Value="20" />
<Setter Property="FontSize"
Value="25" />
<Setter Property="HorizontalContentAlignment"
Value="Center" />
<Setter Property="VerticalContentAlignment"
Value="Center" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type CalendarButton}">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0:0:0.1" />
</VisualStateGroup.Transitions>
<VisualState x:Name="Normal" />
<VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimation Duration="0"
To=".5"
Storyboard.TargetProperty="Opacity"
Storyboard.TargetName="Background" />
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<DoubleAnimation Duration="0"
To=".5"
Storyboard.TargetProperty="Opacity"
Storyboard.TargetName="Background" />
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="SelectionStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0" />
</VisualStateGroup.Transitions>
<VisualState x:Name="Unselected" />
<VisualState x:Name="Selected">
<Storyboard>
<DoubleAnimation Duration="0"
To=".75"
Storyboard.TargetProperty="Opacity"
Storyboard.TargetName="SelectedBackground" />
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="ActiveStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0" />
</VisualStateGroup.Transitions>
<VisualState x:Name="Active" />
<VisualState x:Name="Inactive">
<Storyboard>
<ColorAnimation Duration="0"
To="#FF777777"
Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)"
Storyboard.TargetName="NormalText" />
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="CalendarButtonFocusStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0" />
</VisualStateGroup.Transitions>
<VisualState x:Name="CalendarButtonFocused">
<Storyboard>
<ObjectAnimationUsingKeyFrames Duration="0"
Storyboard.TargetProperty="Visibility"
Storyboard.TargetName="CalendarButtonFocusVisual">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="CalendarButtonUnfocused">
<Storyboard>
<ObjectAnimationUsingKeyFrames Duration="0"
Storyboard.TargetProperty="Visibility"
Storyboard.TargetName="CalendarButtonFocusVisual">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Visibility>Collapsed</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Rectangle x:Name="SelectedBackground"
Fill="{TemplateBinding Background}"
Opacity="0"
RadiusY="1"
RadiusX="1" />
<Rectangle x:Name="Background"
Fill="{TemplateBinding Background}"
Opacity="0"
RadiusY="1"
RadiusX="1" />
<ContentPresenter x:Name="NormalText"
TextElement.Foreground="#FF333333"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="1,0,1,1"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
<Rectangle x:Name="CalendarButtonFocusVisual"
IsHitTestVisible="false"
RadiusY="1"
RadiusX="1"
Stroke="#FF45D6FA"
Visibility="Collapsed" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsFocused"
Value="True">
<Setter Property="Visibility"
TargetName="CalendarButtonFocusVisual"
Value="Visible" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid >
<Popup x:Name="DateTimePopup" Placement="Bottom" IsOpen="True" >
<Calendar Name="dtpDate" Background="Bisque" MouseLeave="dtpDate_MouseLeave"
Style="{DynamicResource CalendarStyle1}"
CalendarItemStyle="{DynamicResource CalendarItemStyle1}"
CalendarButtonStyle="{DynamicResource CalendarButtonStyle1}"
CalendarDayButtonStyle="{DynamicResource CalendarDayButtonStyle1}" SelectedDatesChanged="Calendar_SelectedDatesChanged" Height="384" Width="460" />
</Popup>
<Button x:Name="txtDate" FontSize="18" HorizontalContentAlignment="Left" VerticalContentAlignment="Center" BorderThickness="2" BorderBrush="Blue" Click="txtDate_CLICK" >
<Button.Resources>
<VisualBrush x:Key="HintText" TileMode="None" Opacity="0.5" Stretch="None" AlignmentX="Left">
<VisualBrush.Visual>
<TextBlock Foreground="#FFFFFF" Padding="8,0,0,0" FontSize="16" Text="点击选择日期"/>
</VisualBrush.Visual>
</VisualBrush>
</Button.Resources>
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="true">
<Setter Property="Background" Value="#1C4C80"/>
<Setter Property="Foreground" Value="#FFFFFF"/>
</Trigger>
<Trigger Property="Content" Value="{x:Null}">
<Setter Property="Background" Value="{StaticResource HintText}"/>
</Trigger>
<Trigger Property="Content" Value="">
<Setter Property="Background" Value="{StaticResource HintText}"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</Grid>
</UserControl>
后台
namespace UserCtl.BaseControl
{
/// <summary>
/// DatePic.xaml 的交互逻辑
/// </summary>
public partial class DatePic : UserControl
{
private static readonly ILog log = LogManager.GetLogger(typeof(DatePic));
public DateTime? CurrentDate { get; set; }
/// <summary>
/// 面板是否获取到焦点
/// </summary>
public bool IsPanelGotFoces = false;
/// <summary>
/// 是否正在显示面板
/// </summary>
public bool IsShowPanel = false;
public DatePic()
{
InitializeComponent();
SetHide();
log.ErrorFormat("画面初始化设置:{0}","隐藏");
SetFormValue();
}
/// <summary>
/// 设置控件的日期值
/// </summary>
/// <param name="dt"></param>
public void SetValue(DateTime dt)
{
try
{
CurrentDate = Convert.ToDateTime(dt.ToString("yyyy-MM-dd"));
SetFormValue();
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// 更新画面显示内容
/// </summary>
private void SetFormValue()
{
try
{
if (CurrentDate == null)
{
txtDate.Content = null;
}
else
{
txtDate.Content = Convert.ToDateTime(CurrentDate).ToString("yyyy-MM-dd");
}
}
catch (Exception)
{
throw;
}
}
private string _Text { get; set; }
public string Text
{
get
{
if (CurrentDate == null)
{
return "";
}
else
{
return Convert.ToDateTime(CurrentDate).ToString("yyyy-MM-dd");
}
}
set
{
try
{
CurrentDate = Convert.ToDateTime(value);
SetFormValue();
}
catch (Exception)
{
}
}
}
private void txtDate_CLICK(object sender, RoutedEventArgs e)
{
try
{
SetFormValue();
if (IsShowPanel)
{
SetHide();
log.ErrorFormat("txtDate_CLICK化设置:{0}", "隐藏");
}
else
{
SetShow();
log.ErrorFormat("txtDate_CLICK化设置:{0}", "显示");
}
}
catch (Exception)
{
throw;
}
}
private void Calendar_SelectedDatesChanged(object sender, SelectionChangedEventArgs e)
{
try
{
DateTime SelectDate = dtpDate.SelectedDate.Value;
Text = SelectDate.ToString("yyyy-MM-dd");
SetHide();
log.ErrorFormat("Calendar_SelectedDatesChanged化设置:{0}", "隐藏");
IsShowPanel = false;
SetFormValue();
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// 显示日期选择面板
/// </summary>
private void SetShow()
{
DateTimePopup.IsOpen = true;
IsShowPanel = true;
}
/// <summary>
/// 隐藏日期选择面板
/// </summary>
private void SetHide()
{
DateTimePopup.IsOpen = false;
IsShowPanel = false;
}
private void dtpDate_MouseLeave(object sender, MouseEventArgs e)
{
SetHide();
}
}
}
浙公网安备 33010602011771号