WPF自定义日历控件Calendar 的方法

推荐下载地址 https://www.haolizi.net/example/view_2107.html

csharp 复制代码
<UserControl.Resources>
        <local1:DayConverter x:Key="DayConverter"/><!--导入转换器-->
        <Style x:Key="CalendarStyle1"
                TargetType="{x:Type Calendar}">
            <!--日历控件的背景色,也可以改成绑定的-->
            <Setter Property = "Background"
                     Value="#f6f6f6" />
            <Setter Property = "Template" >
                <Setter.Value >
                    <ControlTemplate TargetType="{x:Type Calendar}">

                        <StackPanel x:Name="PART_Root"
                                     HorizontalAlignment="Center"
                                     VerticalAlignment="Center">
                            <!--这个是日历控件的主体元件,也是内部元件PART_CalendarItem名称不要更改,可以改它的其它样式属性-->
                            <CalendarItem x:Name="PART_CalendarItem"
                                           BorderBrush="{TemplateBinding BorderBrush}"
                                           BorderThickness="{TemplateBinding BorderThickness}"
                                           Background="{TemplateBinding Background}"
                                           Style="{TemplateBinding CalendarItemStyle}"
                                           Height="{TemplateBinding Height}"
                                           Width="{TemplateBinding Width}"
                                           HorizontalAlignment="Stretch"
                                           VerticalAlignment="Stretch" />
                        </StackPanel>

                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

        <!--日历主体样式表-->
        <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" />
                            <!--Width= "44"
                                   Height= "34"-->
                            <Image x:Name= "imgToday" 
                                   Source= "../../CommonInMy/Image/秋意图.jpg"
                                   VerticalAlignment= "Top"
                                   HorizontalAlignment= "Left"
                                   Visibility= "Hidden" />
                            <Grid>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="*" />
                                    <RowDefinition Height="*" />
                                    <RowDefinition Height="*" />
                                    <RowDefinition Height="*" />
                                </Grid.RowDefinitions>
                                <TextBlock FontSize="10" Grid.Row="4"  Foreground="DarkGray"  Text="{Binding Converter={StaticResource DayConverter} }">  </TextBlock>
                                  
                            </Grid> 
                        </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= "120" />
            <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>
        <Calendar Style= "{DynamicResource CalendarStyle1}"
                  CalendarItemStyle= "{DynamicResource CalendarItemStyle1}"
                  CalendarDayButtonStyle= "{DynamicResource CalendarDayButtonStyle1}"
                  CalendarButtonStyle= "{DynamicResource CalendarButtonStyle1}">

        </Calendar>
    </Grid>

其中绝大部分功能都是写样式:因为没有绑定的 itemsource 功能,加入一个textblock 来展示操作:

<Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="*" />
                <RowDefinition Height="*" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <TextBlock FontSize="10" Grid.Row="4"  Foreground="DarkGray"  Text="{Binding Converter={StaticResource DayConverter} }">  </TextBlock>
              
        </Grid>  

只能够用转换器来操作,因为这converter 调用的时候是自动value传入的是 当前 日期模式 '2024-10-24 00:00:00' 需要再转换器 先 转换成日期操作,然后进入数据库查询当日数据 然后返回 需要字段。

所以转换的方法应该这么写:

csharp 复制代码
  public  class DayConverter : IValueConverter
    {
        #region IValueConverter Members

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value != null)
            {
                DateTime test = (DateTime)value;
                string date = test.ToString("yyyy-MM-dd");
                string wheres = "";
                if (GModel.User.SimiaoId!=1 )
                {
                    wheres += $" and SiniaoId = {GModel.User.SimiaoId} ";
                }
                wheres += $" and ThisDay = '{date}' ";
                string Outstr = new DAL.DALFahuiInfo().QueryShowByCalender(wheres);
                return Outstr;
            }
            return string.Empty;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
        #endregion


    }

其中关于日期的sql操作是这样的 新增一个日期列,然后比对日期即可

csharp 复制代码
 /// <summary>
        /// 显示当前日期数据
        /// </summary>
        /// <param name="wheres">wheres条件</param>
        /// <returns></returns>
        public string  QueryShowByCalender(string Wheres)
        { 
            string sql = $@"SELECT b.FahuiName   FROM  ( select a.* from (select   FahuiName ,CONVERT(varchar(100),SetStartDate, 23) as  ThisDay  from [FahuiInfo]) a     where 1=1 {Wheres}) b";
             IEnumerable<string> ThisFanhuiNames =  DapperDbHelper.Query<string>(sql);
            string OutStr = "";
            if (ThisFanhuiNames != null)
            {
                OutStr = string.Join(",",ThisFanhuiNames);
            }
            return OutStr;
        }
相关推荐
cl°8 小时前
【WPF】如何获取屏幕比例
经验分享·wpf
cl°1 天前
【WPF】如何使用异步方法
经验分享·c#·wpf
月落.1 天前
WPF的行为(Behavior)
wpf
cl°1 天前
WPF中视觉树和逻辑树的区别和联系
经验分享·学习·c#·wpf
Nita.4 天前
WPF拖拽交互全攻略及实现自定义拖拽控件及数据交换技巧解析
c#·.net·wpf·1024程序员节
凌霜残雪4 天前
WPF+Mvvm案例实战(五)- 自定义雷达图实现
wpf
月落.4 天前
C#WPF的App.xaml启动第一个窗体的3种方式
ui·c#·wpf
月落.4 天前
WPF样式
开发语言·wpf
时光追逐者4 天前
一个基于.NET8+WPF开源的简单的工作流系统
开发语言·microsoft·c#·asp.net·.net·wpf·.netcore