1. 程式人生 > 其它 >WPF日期時間控制元件

WPF日期時間控制元件

效果圖如下

控制元件的背景 和按鈕的背景樣式 都是用圖片做的,本次就不上傳了 只傳程式碼

前臺樣式程式碼

<Style x:Key="MeetingTextBox" TargetType="{x:Type TextBox}">
        <Setter Property="Height" Value="28"></Setter>
        <Setter Property="FontSize" Value="14"></Setter>
        <Setter Property="BorderThickness"
Value="0"></Setter> <Setter Property="common:PamirAttachProperty.CornerRadius" Value="3"></Setter> <Setter Property="CaretBrush" Value="#C0E9FC"></Setter> <Setter Property="Foreground" Value="#C0E9FC"></Setter> <Setter Property
="VerticalAlignment" Value="Center"></Setter> <Setter Property="Background"> <Setter.Value> <SolidColorBrush Color="#3C5270" Opacity="0.6"></SolidColorBrush> </Setter.Value> </Setter> <Setter Property
="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type TextBox}"> <Grid x:Name="PART_Root"> <Border x:Name="Bg" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" CornerRadius="{TemplateBinding common:PamirAttachProperty.CornerRadius}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}"> <Grid x:Name="PART_InnerGrid"> <!--內容區域--> <ScrollViewer x:Name="PART_ContentHost" BorderThickness="0" IsTabStop="False" Margin="1,0,0,0" VerticalAlignment="{TemplateBinding VerticalAlignment}" Background="{x:Null}"/> <!--水印--> <TextBlock x:Name="Message" Padding="{TemplateBinding Padding}" Visibility="Collapsed" Text="{TemplateBinding common:PamirAttachProperty.Watermark}" Foreground="{TemplateBinding Foreground}" IsHitTestVisible="False" Opacity="0.5" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalAlignment}" Margin="5,2" /> </Grid> </Border> </Grid> <ControlTemplate.Triggers> <!--顯示水印--> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Text}" Value=""> <Setter TargetName="Message" Property="Visibility" Value="Visible" /> </DataTrigger> <!--<Trigger Property="IsMouseOver" Value="True"> <Setter Property="BorderBrush" Value="#C0E9FC"/> <Setter Property="BorderThickness" Value="1"></Setter> </Trigger>--> <Trigger Property="IsFocused" Value="True"> <Setter Property="BorderBrush" Value="#C0E9FC"/> <Setter Property="BorderThickness" Value="0.5"></Setter> </Trigger> <!--不可用--> <Trigger Property="IsEnabled" Value="False"> <Setter TargetName="PART_Root" Property="Opacity" Value="0.5" /> </Trigger> <Trigger Property="Validation.HasError" Value="true"> <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" /> <Setter Property="BorderBrush" Value="Red" /> </Trigger> <!--只讀時,禁用PART_AttachContent--> <!--<Trigger Property="IsReadOnly" Value="True"> <Setter TargetName="PART_AttachContent" Property="IsEnabled" Value="False" /> <Setter TargetName="Bg" Property="Opacity" Value="0.88" /> <Setter TargetName="PART_ContentHost" Property="Opacity" Value="0.88" /> <Setter TargetName="Label" Property="Opacity" Value="0.88" /> </Trigger>--> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style TargetType="ComboBoxItem" x:Key="MeetingComboBoxItemStyle"> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> <Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="RenderOptions.ClearTypeHint" Value="Enabled" /> <Setter Property="BorderThickness" Value="0" /> <Setter Property="Height" Value="28" /> <Setter Property="Foreground" Value="#C0E9FC"></Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ComboBoxItem"> <Grid Background="{TemplateBinding Background}" Margin="0,0.5"> <Border x:Name="ItemBackground" IsHitTestVisible="False" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" /> <ContentPresenter x:Name="contentPresenter" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" /> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter TargetName="ItemBackground" Property="Background" Value="#0A78D5" /> <Setter Property="Foreground" Value="White"></Setter> </Trigger> <Trigger Property="IsMouseOver" Value="True"> <Setter TargetName="ItemBackground" Property="Background" Value="#0A78D5" /> <Setter Property="Foreground" Value="White"></Setter> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="ComboxButton" TargetType="{x:Type ToggleButton}"> <Setter Property="BorderThickness" Value="0"></Setter> <Setter Property="BorderBrush" Value="Transparent"></Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ToggleButton}"> <Border x:Name="PART_root"> <Grid Background="{TemplateBinding Background}"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"></ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition> </Grid.ColumnDefinitions> <Border x:Name="PART_btn" Grid.Column="1" Width="20" Height="20"></Border> </Grid> </Border> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="True"> <Setter TargetName="PART_btn" Property="Background"> <Setter.Value> <ImageBrush ImageSource="pack://application:,,,/PamirNms;component/Resources/imgs/sys/branch-closed.png"></ImageBrush> </Setter.Value> </Setter> </Trigger> <Trigger Property="IsChecked" Value="False"> <Setter TargetName="PART_btn" Property="Background"> <Setter.Value> <ImageBrush ImageSource="pack://application:,,,/PamirNms;component/Resources/imgs/sys/combobox_down_disabled.png"></ImageBrush> </Setter.Value> </Setter> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="DateTimePickerButton" TargetType="{x:Type ToggleButton}"> <Setter Property="BorderThickness" Value="0"></Setter> <Setter Property="BorderBrush" Value="Transparent"></Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ToggleButton}"> <Border x:Name="PART_root"> <Grid Background="{TemplateBinding Background}"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"></ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition> </Grid.ColumnDefinitions> <Border x:Name="PART_btn" Grid.Column="1" Width="20" Height="20"></Border> </Grid> </Border> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="True"> <Setter TargetName="PART_btn" Property="Background"> <Setter.Value> <ImageBrush ImageSource="pack://application:,,,/PamirNms;component/Resources/imgs/sys/calendar.png"></ImageBrush> </Setter.Value> </Setter> </Trigger> <Trigger Property="IsChecked" Value="False"> <Setter TargetName="PART_btn" Property="Background"> <Setter.Value> <ImageBrush ImageSource="pack://application:,,,/PamirNms;component/Resources/imgs/sys/calendar.png"></ImageBrush> </Setter.Value> </Setter> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="MeetingCombobox" TargetType="{x:Type ComboBox}"> <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/> <Setter Property="Height" Value="30" /> <Setter Property="Foreground" Value="#C0E9FC" /> <Setter Property="Background"> <Setter.Value> <SolidColorBrush Color="#3C5270" Opacity="0.6"></SolidColorBrush> </Setter.Value> </Setter> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> <Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="BorderThickness" Value="0" /> <Setter Property="BorderBrush" Value="#C0E9FC" /> <Setter Property="common:PamirAttachProperty.CornerRadius" Value="3"></Setter> <Setter Property="FontSize" Value="14" /> <Setter Property="ItemContainerStyle" Value="{StaticResource MeetingComboBoxItemStyle}" /> <Setter Property="SnapsToDevicePixels" Value="True" /> <Setter Property="MaxDropDownHeight" Value="400" /> <Setter Property="ScrollViewer.CanContentScroll" Value="False" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ComboBox}"> <Grid x:Name="PART_Root"> <Border x:Name="Bg" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" CornerRadius="{TemplateBinding common:PamirAttachProperty.CornerRadius}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" /> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <!--下拉按鈕--> <ToggleButton x:Name="PART_DropDownToggle" IsTabStop="False" Style="{StaticResource ComboxButton}" IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" Margin="2 1 2 1" Grid.Column="0" Grid.ColumnSpan="2" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" Background="{TemplateBinding Background}"/> <!--水印--> <Border Grid.Column="0"> <TextBlock x:Name="Message" Padding="0" Visibility="Collapsed" Text="{TemplateBinding common:PamirAttachProperty.Watermark}" Foreground="{TemplateBinding Foreground}" IsHitTestVisible="False" Opacity="0.5" HorizontalAlignment="Left" TextAlignment="Center" VerticalAlignment="Center" Margin="5,2,5,2" /> </Border> <!--主內容區域--> <Grid Grid.Column="0" x:Name="ContentSite" Margin="2 0 0 0" > <ContentPresenter x:Name="PART_SelectedItem" ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" Content="{TemplateBinding SelectionBoxItem}" ContentStringFormat="{TemplateBinding SelectionBoxItemStringFormat}" HorizontalAlignment="Stretch" Margin="2,0,2,0" IsHitTestVisible="False" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" /> <!--文字編輯--> <TextBox x:Name="PART_EditableTextBox" Style="{StaticResource MeetingTextBox}" Visibility="Collapsed" HorizontalAlignment="Stretch" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" IsHitTestVisible="True" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" IsReadOnly="{TemplateBinding IsReadOnly}" FontFamily="{TemplateBinding FontFamily}" Foreground="{TemplateBinding Foreground}" Text="{TemplateBinding Text}" FontSize="{TemplateBinding FontSize}" /> </Grid> </Grid> <!--彈出下拉控制元件--> <Popup x:Name="PART_Popup" AllowsTransparency="True" Focusable="False" IsOpen="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}" Placement="Bottom"> <Grid Width="{Binding ActualWidth, RelativeSource={RelativeSource TemplatedParent}}" MaxHeight="{Binding MaxDropDownHeight, RelativeSource={RelativeSource TemplatedParent}}"> <Border x:Name="PopupBorder" BorderThickness="{TemplateBinding BorderThickness}" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="{TemplateBinding BorderBrush}" Background="#233757"> </Border> <ScrollViewer x:Name="DropDownScrollViewer" BorderThickness="0" Margin="1"> <ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Contained" /> </ScrollViewer> </Grid> </Popup> </Grid> <!--觸發器--> <ControlTemplate.Triggers> <!--1.顯示水印--> <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Text}" Value=""> <Setter TargetName="Message" Property="Visibility" Value="Visible" /> </DataTrigger> <!--編輯模式--> <Trigger Property="IsEditable" Value="True"> <Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible" /> <Setter TargetName="PART_SelectedItem" Property="Visibility" Value="Collapsed" /> <Setter TargetName="PART_DropDownToggle" Property="Grid.Column" Value="3" /> <Setter TargetName="PART_DropDownToggle" Property="Grid.ColumnSpan" Value="1" /> <Setter TargetName="PART_DropDownToggle" Property="Background" Value="Transparent" /> <Setter Property="IsTabStop" Value="false" /> <Setter TargetName="PART_DropDownToggle" Property="Focusable" Value="False" /> </Trigger> <Trigger Property="IsFocused" Value="True"> <Setter Property="BorderThickness" Value="1"/> </Trigger> <Trigger Property="IsKeyboardFocusWithin" Value="True"> <Setter Property="BorderThickness" Value="1"/> </Trigger> <Trigger Property="IsEnabled" Value="False"> <Setter TargetName="PART_Root" Property="Opacity" Value="0.88"></Setter> </Trigger> <Trigger Property="Validation.HasError" Value="true"> <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" /> <Setter Property="BorderBrush" Value="Red"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style TargetType="{x:Type ToolTip}"> <Setter Property="MinHeight" Value="45"></Setter> <Setter Property="Foreground" Value="#C0E9FC"></Setter> <Setter Property="Background"> <Setter.Value> <ImageBrush Stretch="Fill" ImageSource="pack://application:,,,/PamirNms;component/Resources/imgs/sys/skin_win_bk.png"></ImageBrush> </Setter.Value> </Setter> </Style> <sys:Double x:Key="ScrollBarSize">12</sys:Double> <!--滾動條滑塊兩邊按鈕樣式--> <Style x:Key="ScrollBarTrackButton" TargetType="{x:Type RepeatButton}"> <Setter Property="Background" Value="Transparent"></Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type RepeatButton}"> <Border Background="Transparent"></Border> </ControlTemplate> </Setter.Value> </Setter> </Style> <!--滾動條滑塊樣式--> <ControlTemplate x:Key="ThumbTemplate" TargetType="Thumb"> <Grid> <Border x:Name="Bg" CornerRadius="2" MinHeight="{TemplateBinding MinHeight}" Margin="2" SnapsToDevicePixels="True" Background="#877F7F"> <!--<Border.Background> <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1"> <GradientStop Color="#C7C0C0" Offset="0.15"/> <GradientStop Color="#AFA9A9" Offset=".5"/> <GradientStop Color="#989494" Offset=".5"/> <GradientStop Color="#858585" Offset="1"/> </LinearGradientBrush> </Border.Background>--> </Border> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="Black" TargetName="Bg"></Setter> </Trigger> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Opacity" Value="0.5" TargetName="Bg"></Setter> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> <!--水平滾滾動條模板--> <ControlTemplate x:Key="HorizontalScrollBar" TargetType="{x:Type ScrollBar}"> <Grid x:Name="HorizontalRoot" Height="{TemplateBinding Height}"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <!--外部背景,好像不用更好看--> <!--<Border x:Name="Bg" Grid.Column="0" Grid.ColumnSpan="3" CornerRadius="0" Opacity="0" Background="#858585"/>--> <!--內部背景--> <Border x:Name="BgInner" Grid.Column="1" Margin="0" SnapsToDevicePixels="True" Opacity="0.3" CornerRadius="6" Background="#877F7F"/> <!--左按鈕--> <!--<Border Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Center"> <RepeatButton local:ControlAttachProperty.FIcon="&#xe65e;" Style="{StaticResource ScrollBarButton}" x:Name="HorizontalSmallDecrease" IsTabStop="False" Interval="50" Margin="0,1,0,0" Command="ScrollBar.LineLeftCommand"/> </Border>--> <!--中間滑動區域--> <Track x:Name="PART_Track" IsDirectionReversed="False" Grid.Column="1"> <!--左滑塊--> <Track.DecreaseRepeatButton> <RepeatButton x:Name="HorizontalLargeDecrease" Command="ScrollBar.PageLeftCommand" IsTabStop="False" Interval="50" Style="{DynamicResource ScrollBarTrackButton}" /> </Track.DecreaseRepeatButton> <!--中間滑塊 Margin="1" VerticalAlignment="Center" VerticalContentAlignment="Center" --> <Track.Thumb> <Thumb Template="{StaticResource ThumbTemplate}" /> </Track.Thumb> <!--右滑塊--> <Track.IncreaseRepeatButton> <RepeatButton x:Name="HorizontalLargeIncrease" Command="ScrollBar.PageRightCommand" IsTabStop="False" Interval="50" Style="{DynamicResource ScrollBarTrackButton}" /> </Track.IncreaseRepeatButton> </Track> <!--右按鈕--> <!--<Border Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Center"> <RepeatButton local:ControlAttachProperty.FIcon="&#xe605;" Style="{StaticResource ScrollBarButton}" IsTabStop="False" Interval="50" Margin="0,1,0,0" Command="ScrollBar.LineRightCommand"/> </Border>--> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="true"> <Setter TargetName="BgInner" Property="Opacity" Value="0.5"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> <!--垂直滾滾動條模板--> <ControlTemplate x:Key="VerticalScrollBar" TargetType="{x:Type ScrollBar}"> <Grid x:Name="VerticalRoot" Height="{TemplateBinding Height}"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <!--外部背景,好像不用更好看--> <!--<Border x:Name="Bg" Grid.Row="0" Grid.RowSpan="3" CornerRadius="0" Opacity="0" Background="#858585"/>--> <!--內部背景--> <Border x:Name="BgInner" Grid.Row="1" Margin="0" CornerRadius="6" SnapsToDevicePixels ="True" Opacity="0.3" Background="#877F7F"/> <!--上按鈕--> <!--<Border Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Center" x:Name="VerticalSmallDecrease"> <RepeatButton local:ControlAttachProperty.FIcon="&#xe65d;" Style="{StaticResource ScrollBarButton}" IsTabStop="False" Interval="50" Margin="0" Command="ScrollBar.LineUpCommand"/> </Border>--> <!--中間滑動區域--> <Track x:Name="PART_Track" IsDirectionReversed="true" Grid.Row="1"> <!--上滑塊--> <Track.DecreaseRepeatButton> <RepeatButton x:Name="HorizontalLargeDecrease" Command="ScrollBar.PageUpCommand" IsTabStop="False" Interval="50" Style="{DynamicResource ScrollBarTrackButton}" /> </Track.DecreaseRepeatButton> <!--中間滑塊--> <Track.Thumb> <Thumb Template="{StaticResource ThumbTemplate}" MinHeight="15"/> </Track.Thumb> <!--下滑塊--> <Track.IncreaseRepeatButton> <RepeatButton x:Name="HorizontalLargeIncrease" Command="ScrollBar.PageDownCommand" IsTabStop="False" Interval="50" Style="{DynamicResource ScrollBarTrackButton}" /> </Track.IncreaseRepeatButton> </Track> <!--下按鈕--> <!--<Border Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Center" x:Name="VerticalSmallIncrease"> <RepeatButton local:ControlAttachProperty.FIcon="&#xe64b;" Style="{StaticResource ScrollBarButton}" IsTabStop="False" Interval="50" Margin="0" Command="ScrollBar.LineDownCommand"/> </Border>--> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="true"> <Setter TargetName="BgInner" Property="Opacity" Value="0.5"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> <!--ScrollBar樣式--> <Style x:Key="DefaultScrollBar" TargetType="{x:Type ScrollBar}"> <Setter Property="SnapsToDevicePixels" Value="True" /> <Setter Property="OverridesDefaultStyle" Value="true" /> <Style.Triggers> <Trigger Property="Orientation" Value="Horizontal"> <Setter Property="Template" Value="{StaticResource HorizontalScrollBar}" /> <Setter Property="Height" Value="{StaticResource ScrollBarSize}" /> </Trigger> <Trigger Property="Orientation" Value="Vertical"> <Setter Property="Template" Value="{StaticResource VerticalScrollBar}" /> <Setter Property="Width" Value="{StaticResource ScrollBarSize}" /> </Trigger> </Style.Triggers> </Style> <Style TargetType="{x:Type ScrollBar}" BasedOn="{StaticResource DefaultScrollBar}"></Style> <!--週六日日期顏色轉換--> <control:DateConvertToColor x:Key="DateConvertToColor"></control:DateConvertToColor> <!--Day按鈕樣式--> <Style x:Key="CalendarDayButtonStyle" TargetType="{x:Type CalendarDayButton}"> <Setter Property="MinWidth" Value="40" /> <Setter Property="MinHeight" Value="30" /> <Setter Property="FontFamily" Value="微軟雅黑" /> <Setter Property="FontSize" Value="16" /> <Setter Property="HorizontalContentAlignment" Value="Center" /> <Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="Background" Value="Transparent" /> <Setter Property="Foreground" Value="#C0E9FC" /> <Setter Property="Margin" Value="0" /> <Setter Property="IsTabStop" Value="False" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type CalendarDayButton}"> <Grid x:Name="Grid" Margin="{TemplateBinding Margin}"> <Border x:Name="Bg" Background="{TemplateBinding Background}" /> <ContentPresenter x:Name="NormalText" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="5,2,5,2" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" > <TextElement.Foreground> <Binding RelativeSource="{RelativeSource TemplatedParent}" Converter="{StaticResource DateConvertToColor}"> </Binding> </TextElement.Foreground> </ContentPresenter> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter Property="Background" Value="#0A78D5"></Setter> <Setter Property="Foreground" Value="White"></Setter> </Trigger> <Trigger Property="IsToday" Value="True"> <Setter Property="Background" Value="White"></Setter> <Setter Property="Foreground" Value="Black"></Setter> </Trigger> <!--<Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="{StaticResource ItemMouseOverBackground}"></Setter> <Setter Property="Foreground" Value="{StaticResource ItemMouseOverForeground}"></Setter> </Trigger>--> <!--不可用日期--> <Trigger Property="IsBlackedOut" Value="True"> <Setter Property="Opacity" Value="0.6" TargetName="Grid"></Setter> <Setter Property="Foreground" Value="#3C5270"></Setter> </Trigger> <!--不在當月的日期--> <Trigger Property="IsInactive" Value="True"> <Setter Property="Opacity" Value="0.6" TargetName="Grid"></Setter> <Setter Property="Foreground" Value="#3C5270"></Setter> </Trigger> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Opacity" Value="0.5" TargetName="Grid"></Setter> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="CalanderBtn" TargetType="{x:Type Button}"> <Setter Property="FontSize" Value="24"></Setter> <Setter Property="FontFamily" Value="正楷"></Setter> <Setter Property="Background" Value="Transparent"></Setter> <Setter Property="Foreground" Value="White"></Setter> <Setter Property="FontWeight" Value="Bold"></Setter> <Setter Property="VerticalAlignment" Value="Center"></Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Button}"> <Border x:Name="PART_root" Background="{TemplateBinding Background}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"> <Grid VerticalAlignment="{TemplateBinding VerticalAlignment}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}"> <TextBlock FontSize="{TemplateBinding FontSize}" FontFamily="{TemplateBinding FontFamily}" FontWeight="{TemplateBinding FontWeight}" Foreground="{TemplateBinding Foreground}" Text="{TemplateBinding Content}" VerticalAlignment="{TemplateBinding VerticalAlignment}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" ></TextBlock> </Grid> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="CalanderYearBtn" TargetType="{x:Type Button}"> <Setter Property="FontSize" Value="18"></Setter> <Setter Property="FontFamily" Value="微軟雅黑"></Setter> <Setter Property="Background" Value="Transparent"></Setter> <Setter Property="Foreground" Value="#C0E9FC"></Setter> <Setter Property="FontWeight" Value="Bold"></Setter> <Setter Property="HorizontalAlignment" Value="Center"></Setter> <Setter Property="VerticalAlignment" Value="Center"></Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Button}"> <Border x:Name="PART_root" Background="{TemplateBinding Background}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"> <Grid VerticalAlignment="{TemplateBinding VerticalAlignment}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}"> <TextBlock FontSize="{TemplateBinding FontSize}" FontFamily="{TemplateBinding FontFamily}" FontWeight="{TemplateBinding FontWeight}" Foreground="{TemplateBinding Foreground}" Text="{TemplateBinding Content}" VerticalAlignment="{TemplateBinding VerticalAlignment}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" ></TextBlock> </Grid> </Border> </ControlTemplate> </Setter.Value> </Setter> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Cursor" Value="Hand"></Setter> </Trigger> </Style.Triggers> </Style> <!--日期標題顏色轉換--> <control:DateTitleConvertToColor x:Key="DateTitleConvertToColor"></control:DateTitleConvertToColor> <!--日曆日期面板樣式--> <Style x:Key="CalendarItemStyle" TargetType="{x:Type CalendarItem}"> <Setter Property="Margin" Value="0,1,0,1" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type CalendarItem}"> <ControlTemplate.Resources> <!-- 頭部星期樣式--> <DataTemplate x:Key="{x:Static CalendarItem.DayTitleTemplateResourceKey}"> <StackPanel> <StackPanel.Background> <SolidColorBrush Color="#3C5270" Opacity="0.6"></SolidColorBrush> </StackPanel.Background> <!--<TextBlock Text="{Binding}" FontFamily="微軟雅黑" Foreground="#C0E9FC" FontSize="14" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,6,0,6" Opacity="0.8" />--> <TextBlock Text="{Binding}" FontFamily="微軟雅黑" FontSize="14" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,6,0,6" Opacity="0.8" Foreground="{Binding Converter={StaticResource DateTitleConvertToColor}}"> </TextBlock> </StackPanel> </DataTemplate> </ControlTemplate.Resources> <Grid x:Name="PART_Root"> <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1" Background="{TemplateBinding Background}" Margin="{TemplateBinding Margin}"> <Grid Margin="2"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <!--Header--> <Grid Grid.Row="0" HorizontalAlignment="Stretch" Background="{TemplateBinding Background}"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="2*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Button x:Name="PART_HeaderButton" FontWeight="Bold" Focusable="False" Grid.Column="1" Style="{StaticResource CalanderYearBtn}"/> <Button x:Name="PART_PreviousButton" Focusable="False" Grid.Column="0" Style="{StaticResource CalanderBtn}" Margin="5,0,0,0" Content="&lt;" /> <Button x:Name="PART_NextButton" Focusable="False" Grid.Column="2" Style="{StaticResource CalanderBtn}" HorizontalAlignment="Right" Margin="0,0,5,0" Content="&gt;" /> </Grid> <!--PART_MonthView--> <Grid x:Name="PART_MonthView" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="6,1,6,6" Grid.Row="1" Visibility="Visible"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="*" /> <RowDefinition Height="*" /> <RowDefinition Height="*" /> <RowDefinition Height="*" /> <RowDefinition Height="*" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> </Grid> <!--PART_YearView--> <Grid x:Name="PART_YearView" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="6,10,6,10" Grid.Row="1" Visibility="Hidden"> <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> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Opacity" TargetName="PART_Root" Value="0.5" /> </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> <!--Decade 美 ['dɛked] n. 十年,十年期;十--> <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="CalendarButtonStyle" TargetType="{x:Type CalendarButton}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="MinWidth" Value="40" /> <Setter Property="MinHeight" Value="42" /> <Setter Property="FontSize" Value="14" /> <Setter Property="FontFamily" Value="微軟雅黑" /> <Setter Property="HorizontalContentAlignment" Value="Center" /> <Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type CalendarButton}"> <Grid x:Name="Grid" Margin="{TemplateBinding Margin}"> <Border x:Name="Bg" Background="{TemplateBinding Background}" /> <ContentPresenter x:Name="NormalText" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="5,2,5,2" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" TextElement.Foreground="{TemplateBinding Foreground}" /> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsFocused" Value="True"> <Setter Property="Background" Value="#071A34"></Setter> <Setter Property="Foreground" Value="#C0E9FC"></Setter> </Trigger> <!--<Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="{StaticResource ItemMouseOverBackground}"></Setter> <Setter Property="Foreground" Value="{StaticResource ItemMouseOverForeground}"></Setter> </Trigger>--> <!--不在當月的日期--> <Trigger Property="IsInactive" Value="True"> <Setter Property="Opacity" Value="0.6" TargetName="Grid"></Setter> <Setter Property="Foreground" Value="#3C5270"></Setter> </Trigger> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Opacity" Value="0.6" TargetName="Grid"></Setter> <Setter Property="Foreground" Value="#3C5270"></Setter> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> <!--預設日曆樣式--> <Style x:Key="DefaultCalendar" TargetType="{x:Type Calendar}"> <Setter Property="SnapsToDevicePixels" Value="True" /> <Setter Property="Foreground" Value="#C0E9FC" /> <Setter Property="CalendarDayButtonStyle" Value="{StaticResource CalendarDayButtonStyle}" /> <Setter Property="CalendarItemStyle" Value="{StaticResource CalendarItemStyle}" /> <Setter Property="CalendarButtonStyle" Value="{StaticResource CalendarButtonStyle}" /> <Setter Property="Background" Value="#071A34" /> <Setter Property="BorderBrush" Value="#071A34" /> <Setter Property="BorderThickness" Value="0" /> <Setter Property="FontSize" Value="17" /> <Setter Property="FontFamily" Value="微軟雅黑" /> <Setter Property="IsTodayHighlighted" Value="True" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Calendar}"> <CalendarItem x:Name="PART_CalendarItem" BorderBrush="{TemplateBinding BorderBrush}" FontSize="{TemplateBinding FontSize}" FontFamily="{TemplateBinding FontFamily}" Foreground="{TemplateBinding Foreground}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Style="{TemplateBinding CalendarItemStyle}" /> </ControlTemplate> </Setter.Value> </Setter> </Style> <!--自定義控制元件樣式--> <Style TargetType="{x:Type control:DateTimePicker}"> <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/> <Setter Property="Height" Value="30" /> <Setter Property="Foreground" Value="#C0E9FC" /> <Setter Property="Background"> <Setter.Value> <SolidColorBrush Color="#3C5270" Opacity="0.6"></SolidColorBrush> </Setter.Value> </Setter> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> <Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="BorderThickness" Value="0" /> <Setter Property="BorderBrush" Value="#C0E9FC" /> <Setter Property="common:PamirAttachProperty.CornerRadius" Value="3"></Setter> <Setter Property="FontSize" Value="14" /> <Setter Property="SnapsToDevicePixels" Value="True" /> <Setter Property="ScrollViewer.CanContentScroll" Value="False" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ComboBox}"> <Grid x:Name="PART_Root"> <Border x:Name="Bg" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" /> <Grid x:Name="PART_InnerGrid" Margin="0"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <!--下拉按鈕--> <ToggleButton x:Name="PART_DropDownToggle" IsTabStop="False" Style="{StaticResource DateTimePickerButton}" IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" Margin="2 1 2 1" Grid.Column="0" Grid.ColumnSpan="2" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" Background="{TemplateBinding Background}"/> <!--水印--> <Border Grid.Column="0"> <TextBlock x:Name="Message" Padding="0" Visibility="Collapsed" Text="{TemplateBinding common:PamirAttachProperty.Watermark}" Foreground="{TemplateBinding Foreground}" IsHitTestVisible="False" Opacity="0.5" HorizontalAlignment="Left" TextAlignment="Center" VerticalAlignment="Center" Margin="5,2,5,2" /> </Border> <!--主內容區域--> <Grid Grid.Column="0" x:Name="ContentSite" Margin="2 0 0 0" > <ContentPresenter x:Name="PART_SelectedItem" ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" Content="{TemplateBinding Text}" ContentStringFormat="{TemplateBinding SelectionBoxItemStringFormat}" HorizontalAlignment="Stretch" Margin="2,0,20,0" IsHitTestVisible="False" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" /> </Grid> <!--彈出日曆--> <Popup x:Name="PART_Popup" AllowsTransparency="True" Placement="Bottom" PlacementTarget="{Binding ElementName=PART_Root}" StaysOpen="True" IsOpen="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}" > <Border Background="#08D4FE"> <Grid Margin="1,0,1,15"> <Grid.Background> <SolidColorBrush Color="#2D3E5F" Opacity="1"></SolidColorBrush> </Grid.Background> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition Height="Auto"></RowDefinition> </Grid.RowDefinitions> <Grid Grid.Row="0" Background="#071A34"> <Calendar x:Name="PART_Calendar" HorizontalAlignment="Center" Grid.Row="0" Style="{StaticResource DefaultCalendar}" SelectedDate="{Binding SelectedDate,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay, RelativeSource={RelativeSource AncestorType=control:DateTimePicker}}" SelectionMode="SingleDate"></Calendar> </Grid> <Grid Grid.Row="1" SnapsToDevicePixels="True" Margin="0,5,0,0"> <Grid.RowDefinitions> <RowDefinition Height="Auto"></RowDefinition> <RowDefinition Height="Auto"></RowDefinition> </Grid.RowDefinitions> <StackPanel Grid.Row="0" Margin="3" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"> <TextBlock Style="{StaticResource TextStyle}" Margin="10,0">時間:</TextBlock> <ComboBox Style="{StaticResource MeetingCombobox}" Width="100" MaxDropDownHeight="100" Height="25" Text="{Binding Hour,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource AncestorType=control:DateTimePicker}}"> <ComboBoxItem>00</ComboBoxItem> <ComboBoxItem>01</ComboBoxItem> <ComboBoxItem>02</ComboBoxItem> <ComboBoxItem>03</ComboBoxItem> <ComboBoxItem>04</ComboBoxItem> <ComboBoxItem>05</ComboBoxItem> <ComboBoxItem>06</ComboBoxItem> <ComboBoxItem>07</ComboBoxItem> <ComboBoxItem>08</ComboBoxItem> <ComboBoxItem>09</ComboBoxItem> <ComboBoxItem>10</ComboBoxItem> <ComboBoxItem>11</ComboBoxItem> <ComboBoxItem>12</ComboBoxItem> <ComboBoxItem>13</ComboBoxItem> <ComboBoxItem>14</ComboBoxItem> <ComboBoxItem>15</ComboBoxItem> <ComboBoxItem>16</ComboBoxItem> <ComboBoxItem>17</ComboBoxItem> <ComboBoxItem>18</ComboBoxItem> <ComboBoxItem>19</ComboBoxItem> <ComboBoxItem>20</ComboBoxItem> <ComboBoxItem>21</ComboBoxItem> <ComboBoxItem>22</ComboBoxItem> <ComboBoxItem>23</ComboBoxItem> </ComboBox> <TextBlock Style="{StaticResource TextStyle}" Margin="10,0"></TextBlock> <ComboBox Style="{StaticResource MeetingCombobox}" MaxDropDownHeight="100" Width="100" Height="25" Text="{Binding Minute,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource AncestorType=control:DateTimePicker}}"> <ComboBoxItem>00</ComboBoxItem> <ComboBoxItem>01</ComboBoxItem> <ComboBoxItem>02</ComboBoxItem> <ComboBoxItem>03</ComboBoxItem> <ComboBoxItem>04</ComboBoxItem> <ComboBoxItem>05</ComboBoxItem> <ComboBoxItem>06</ComboBoxItem> <ComboBoxItem>07</ComboBoxItem> <ComboBoxItem>08</ComboBoxItem> <ComboBoxItem>09</ComboBoxItem> <ComboBoxItem>10</ComboBoxItem> <ComboBoxItem>11</ComboBoxItem> <ComboBoxItem>12</ComboBoxItem> <ComboBoxItem>13</ComboBoxItem> <ComboBoxItem>14</ComboBoxItem> <ComboBoxItem>15</ComboBoxItem> <ComboBoxItem>16</ComboBoxItem> <ComboBoxItem>17</ComboBoxItem> <ComboBoxItem>18</ComboBoxItem> <ComboBoxItem>19</ComboBoxItem> <ComboBoxItem>20</ComboBoxItem> <ComboBoxItem>21</ComboBoxItem> <ComboBoxItem>22</ComboBoxItem> <ComboBoxItem>23</ComboBoxItem> <ComboBoxItem>24</ComboBoxItem> <ComboBoxItem>25</ComboBoxItem> <ComboBoxItem>26</ComboBoxItem> <ComboBoxItem>27</ComboBoxItem> <ComboBoxItem>28</ComboBoxItem> <ComboBoxItem>29</ComboBoxItem> <ComboBoxItem>30</ComboBoxItem> <ComboBoxItem>31</ComboBoxItem> <ComboBoxItem>32</ComboBoxItem> <ComboBoxItem>33</ComboBoxItem> <ComboBoxItem>34</ComboBoxItem> <ComboBoxItem>35</ComboBoxItem> <ComboBoxItem>36</ComboBoxItem> <ComboBoxItem>37</ComboBoxItem> <ComboBoxItem>38</ComboBoxItem> <ComboBoxItem>39</ComboBoxItem> <ComboBoxItem>40</ComboBoxItem> <ComboBoxItem>41</ComboBoxItem> <ComboBoxItem>42</ComboBoxItem> <ComboBoxItem>43</ComboBoxItem> <ComboBoxItem>44</ComboBoxItem> <ComboBoxItem>45</ComboBoxItem> <ComboBoxItem>46</ComboBoxItem> <ComboBoxItem>47</ComboBoxItem> <ComboBoxItem>48</ComboBoxItem> <ComboBoxItem>49</ComboBoxItem> <ComboBoxItem>50</ComboBoxItem> <ComboBoxItem>51</ComboBoxItem> <ComboBoxItem>52</ComboBoxItem> <ComboBoxItem>53</ComboBoxItem> <ComboBoxItem>54</ComboBoxItem> <ComboBoxItem>55</ComboBoxItem> <ComboBoxItem>56</ComboBoxItem> <ComboBoxItem>57</ComboBoxItem> <ComboBoxItem>58</ComboBoxItem> <ComboBoxItem>59</ComboBoxItem> </ComboBox> <TextBlock Style="{StaticResource TextStyle}" Margin="10,0,10,0"></TextBlock> </StackPanel> <StackPanel Grid.Row="1" Margin="3" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"> <Button ClickMode="Press" Style="{StaticResource PamirButton}" Margin="0,0,5,0" Command="{Binding OkCommand,RelativeSource={RelativeSource AncestorType=control:DateTimePicker}}">確定</Button> <Button ClickMode="Press" Style="{StaticResource PamirButton}" Margin="5,0,0,0" Command="{Binding CancelCommand,RelativeSource={RelativeSource AncestorType=control:DateTimePicker}}">取消</Button> </StackPanel> </Grid> </Grid> </Border> </Popup> </Grid> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsFocused" Value="True"> <Setter Property="BorderThickness" Value="1"/> </Trigger> <Trigger Property="IsKeyboardFocusWithin" Value="True"> <Setter Property="BorderThickness" Value="1"/> </Trigger> <Trigger Property="IsEnabled" Value="False"> <Setter TargetName="PART_Root" Property="Opacity" Value="0.88"></Setter> </Trigger> <Trigger Property="IsKeyboardFocusWithin" Value="True"> <Setter Property="BorderThickness" Value="1"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style>

後臺程式碼

[TemplatePart(Name = "PART_Calendar",Type = typeof(System.Windows.Controls.Calendar))]
    public class DateTimePicker : ComboBox
    {
        public static readonly DependencyProperty DateAndTimeTextProperty = DependencyProperty.Register(
            "DateAndTimeText", typeof(string), typeof(DateTimePicker), new PropertyMetadata(default(string)));

        public string DateAndTimeText
        {
            get { return (string)GetValue(DateAndTimeTextProperty); }
            set { SetValue(DateAndTimeTextProperty, value); }
        }


        public static readonly DependencyProperty SelectedDateProperty = DependencyProperty.Register(
            "SelectedDate", typeof(DateTime?), typeof(DateTimePicker), new PropertyMetadata(default(DateTime?)));

        public DateTime? SelectedDate
        {
            get { return (DateTime?)GetValue(SelectedDateProperty); }
            set { SetValue(SelectedDateProperty, value); }
        }

        public static readonly DependencyProperty HourProperty = DependencyProperty.Register(
            "Hour", typeof(string), typeof(DateTimePicker), new PropertyMetadata(default(string)));

        public string Hour
        {
            get { return (string) GetValue(HourProperty); }
            set { SetValue(HourProperty, value); }
        }

        public static readonly DependencyProperty MinuteProperty = DependencyProperty.Register(
            "Minute", typeof(string), typeof(DateTimePicker), new PropertyMetadata(default(string)));

        public string Minute
        {
            get { return (string) GetValue(MinuteProperty); }
            set { SetValue(MinuteProperty, value); }
        }

        public ICommand OkCommand { get; set; }

        public ICommand CancelCommand { get; set; }

        protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
        {
            base.OnPropertyChanged(e);

            if (e.Property == DateAndTimeTextProperty)
            {
                this.Text = DateAndTimeText;
                string[] datetime = DateAndTimeText.Split(' ');
                if (datetime.Length == 2)
                {
                    SelectedDate = DateTime.Parse(datetime[0]);
                    string[] times = datetime[1].Split(':');
                    Hour = times[0];
                    Minute = times[1];
                }
            }
        }

        public DateTimePicker()
        {
            OkCommand = new DelegateCommand(OkFunc);
            CancelCommand=new DelegateCommand(CancelFunc);
            
            this.Loaded += DateTimePicker_Loaded;
        }

        private void DateTimePicker_Loaded(object sender, RoutedEventArgs e)
        {
            if (string.IsNullOrEmpty(DateAndTimeText))
            {
                string date = $"{DateTime.Now:yyyy-MM-dd HH:mm}";
                DateAndTimeText = date;
            }

            if (Template.FindName("PART_Calendar", this) is System.Windows.Controls.Calendar cander)
            {
                cander.PreviewMouseUp += (s, ce) =>
                {
                    if (Mouse.Captured is CalendarItem)
                    {
                        Mouse.Capture(null);
                    }

                };
            }
        }

        private void OkFunc()
        {
            if (SelectedDate != null)
            {
                string date = $"{SelectedDate?.ToString("yyyy-MM-dd")} {Hour}:{Minute}";
                DateAndTimeText = date;
            }
            else
            {
                string date = $"{DateTime.Now:yyyy-MM-dd HH:mm}";
                DateAndTimeText = date;
            }

            IsDropDownOpen = false;
        }

        private void CancelFunc()
        {
            IsDropDownOpen = false;
        }

    }
    /// <summary>
    /// 日期顏色轉換器
    /// </summary>
    public class DateConvertToColor : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var calendarDayButton = (CalendarDayButton)value;
            if (calendarDayButton.IsToday)
            {
                return Brushes.Black;
            }
            var dateTime = (DateTime)calendarDayButton.DataContext;
            if (!calendarDayButton.IsMouseOver && !calendarDayButton.IsSelected && !calendarDayButton.IsBlackedOut && (dateTime.DayOfWeek == DayOfWeek.Saturday || dateTime.DayOfWeek == DayOfWeek.Sunday))
                return new SolidColorBrush(Color.FromArgb(255, 255, 47, 47));
            else
                return new SolidColorBrush(Color.FromRgb(192, 233, 252));
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

    /// <summary>
    /// 日期標題顏色轉換器
    /// </summary>
    public class DateTitleConvertToColor : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            
            if (value == null)
            {
                return new SolidColorBrush(Color.FromRgb(192, 233, 252));
            }

            string day = value.ToString();
            if (day == "" || day == "" || day.ToUpper() == "SAT" || day.ToUpper() == "SUN")
            {

                return new SolidColorBrush(Color.FromArgb(255, 255, 47, 47));

            }

            return new SolidColorBrush(Color.FromRgb(192, 233, 252));

        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

轉載請註明出處

不想平凡,奈何太懶 T_T