zoukankan      html  css  js  c++  java
  • 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();
            }
             
        }
    }
    

      

  • 相关阅读:
    使用logstash收集java、nginx、系统等常见日志
    day71-Auth模块,BBS小作业初始
    day70-django中间件
    day69-form源码,cookies与session
    day68-分布器的使用,forms组件
    day67-ajax发送数据,分页器等
    day66-图书管理系统,Ajax,choices参数等
    复习知识点-没搞清楚的总结
    day65-聚合查询,分组查询,F与Q查询,事务,参数
    day64-表单查询,双下查询,各种查询(model层,数据库操作)
  • 原文地址:https://www.cnblogs.com/lhlong/p/14074446.html
Copyright © 2011-2022 走看看