WPF自定义日历控件Calendar 的方法
推荐下载地址 https://www.haolizi.net/example/view_2107.html
<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’ 需要再转换器 先 转换成日期操作,然后进入数据库查询当日数据 然后返回 需要字段。
所以转换的方法应该这么写:
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操作是这样的 新增一个日期列,然后比对日期即可
/// <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;
}