Themes/MaterialDesignTheme.Clock.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:converters="clr-namespace:MaterialDesignThemes.Wpf.Converters" xmlns:wpf="clr-namespace:MaterialDesignThemes.Wpf"> <Style x:Key="MaterialDesignClockItemThumb" TargetType="{x:Type Thumb}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Thumb}"> <Ellipse Fill="{TemplateBinding Background}" /> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="MaterialDesignCalendarMeridiemRadioButton" TargetType="{x:Type RadioButton}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="FontSize" Value="14" /> <Setter Property="FontWeight" Value="Medium" /> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type RadioButton}"> <Grid> <Ellipse Fill="{TemplateBinding Background}" /> <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Content="{TemplateBinding Content}" /> </Grid> </ControlTemplate> </Setter.Value> </Setter> <Style.Triggers> <Trigger Property="IsChecked" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Foreground}" /> </Trigger> </Style.Triggers> </Style> <Style x:Key="MaterialDesignCalendarMeridiemRadioButtonDefault" TargetType="{x:Type RadioButton}"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.ForegroundLight}" /> <Setter Property="FontSize" Value="14" /> <Setter Property="FontWeight" Value="Medium" /> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.ForegroundLight}" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type RadioButton}"> <Grid> <Border Background="{TemplateBinding Background}" Opacity=".12" /> <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Content="{TemplateBinding Content}" /> </Grid> </ControlTemplate> </Setter.Value> </Setter> <Style.Triggers> <Trigger Property="IsChecked" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> </Trigger> </Style.Triggers> </Style> <Style x:Key="MaterialDesignCalendarMeridiemRadioButtonThemed" TargetType="{x:Type RadioButton}"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> <Setter Property="FontSize" Value="14" /> <Setter Property="FontWeight" Value="Medium" /> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Foreground}" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type RadioButton}"> <Grid> <Border Background="{TemplateBinding Background}" /> <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Content="{TemplateBinding Content}" /> </Grid> </ControlTemplate> </Setter.Value> </Setter> <Style.Triggers> <Trigger Property="IsChecked" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary}" /> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Foreground}" /> </Trigger> </Style.Triggers> </Style> <Style x:Key="MaterialDesignClock" TargetType="{x:Type wpf:Clock}"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Background}" /> <Setter Property="BorderThickness" Value="1" /> <Setter Property="ButtonRadiusInnerRatio" Value=".6" /> <Setter Property="ButtonRadiusRatio" Value=".835" /> <Setter Property="ButtonStyle"> <Setter.Value> <Style TargetType="{x:Type wpf:ClockItemButton}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="Canvas.ZIndex" Value="0" /> <Setter Property="Height" Value="32" /> <Setter Property="HorizontalContentAlignment" Value="Center" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type wpf:ClockItemButton}"> <Grid> <Thumb x:Name="PART_Thumb" Background="{TemplateBinding Background}" Opacity="23" Style="{StaticResource MaterialDesignClockItemThumb}" /> <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content="{TemplateBinding Content}" IsHitTestVisible="False" /> </Grid> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="Width" Value="32" /> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" /> </Trigger> <Trigger Property="IsChecked" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Foreground}" /> </Trigger> </Style.Triggers> </Style> </Setter.Value> </Setter> <Setter Property="FlowDirection" Value="LeftToRight" /> <Setter Property="IsHeaderVisible" Value="True" /> <Setter Property="LesserButtonStyle"> <Setter.Value> <Style TargetType="{x:Type wpf:ClockItemButton}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="Canvas.ZIndex" Value="1" /> <Setter Property="Height" Value="12" /> <Setter Property="HorizontalContentAlignment" Value="Center" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type wpf:ClockItemButton}"> <Grid> <Thumb x:Name="PART_Thumb" Background="{TemplateBinding Background}" Opacity=".52" Style="{StaticResource MaterialDesignClockItemThumb}" ToolTip="{TemplateBinding Content}" /> <Ellipse Width="6" Height="6" HorizontalAlignment="Center" VerticalAlignment="Center" Fill="{TemplateBinding Background}" IsHitTestVisible="False" /> </Grid> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="Width" Value="12" /> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" /> </Trigger> <Trigger Property="IsChecked" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> </Trigger> </Style.Triggers> </Style> </Setter.Value> </Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type wpf:Clock}"> <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="DisplayModeStates"> <VisualStateGroup.Transitions> <VisualTransition From="*" To="Hours"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1.2" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1.2" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=".85"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=".85"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> <VisualTransition From="Hours" To="Minutes"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> <VisualTransition From="Minutes" To="Seconds"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> <VisualTransition From="Hours" To="Seconds"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> <VisualTransition From="Seconds" To="Minutes"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=".85"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=".85"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1.2" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1.2" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> </VisualStateGroup.Transitions> <VisualState x:Name="Hours"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY" To="1" Duration="0" /> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX" To=".85" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY" To=".85" Duration="0" /> <DoubleAnimation Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX" To=".85" Duration="0" /> <DoubleAnimation Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY" To=".85" Duration="0" /> </Storyboard> </VisualState> <VisualState x:Name="Minutes"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX" To="1.2" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY" To="1.2" Duration="0" /> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY" To="1" Duration="0" /> </Storyboard> </VisualState> <VisualState x:Name="Seconds"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX" To="1.2" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY" To="1.2" Duration="0" /> <DoubleAnimation Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX" To="1.2" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY" To="1.2" Duration="0" /> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY" To="1" Duration="0" /> </Storyboard> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> <Grid> <Grid.RowDefinitions> <RowDefinition Height="auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Border Height="120" Margin="0,0,0,12" Background="{DynamicResource MaterialDesign.Brush.Primary}" CornerRadius="2 2 0 0" Visibility="{TemplateBinding IsHeaderVisible, Converter={x:Static converters:BooleanToVisibilityConverter.CollapsedInstance}}"> <StackPanel x:Name="TimeReadoutStackPanel" Margin="24" HorizontalAlignment="Right" VerticalAlignment="Center" Orientation="Horizontal"> <StackPanel.Resources> <Style x:Key="TimeTextBlock" TargetType="{x:Type TextBlock}"> <Setter Property="FontSize" Value="66" /> <Setter Property="FontWeight" Value="Normal" /> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Foreground}" /> </Style> </StackPanel.Resources> <Grid x:Name="PART_HourReadOut"> <TextBlock x:Name="PART_HourReadOutText" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0:%h}}"> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TimeTextBlock}"> <Setter Property="Opacity" Value=".56" /> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Hours}"> <Setter Property="Opacity" Value="1" /> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> </Grid> <TextBlock Margin="-16,0,-16,0" Style="{StaticResource TimeTextBlock}" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0: : }}" /> <Grid x:Name="PART_MinuteReadOut"> <TextBlock x:Name="PART_MinuteReadOutText" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0:mm}}"> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TimeTextBlock}"> <Setter Property="Opacity" Value=".56" /> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Minutes}"> <Setter Property="Opacity" Value="1" /> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> </Grid> <TextBlock x:Name="PART_SecondColonPrefix" Margin="-16,0,-16,0" Style="{StaticResource TimeTextBlock}" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0: : }}" /> <Grid x:Name="PART_SecondReadOut"> <TextBlock x:Name="PART_SecondReadOutText" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0:ss}}"> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TimeTextBlock}"> <Setter Property="Opacity" Value=".56" /> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Seconds}"> <Setter Property="Opacity" Value="1" /> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> </Grid> <TextBlock x:Name="AmPmReadout" Margin="2,0,0,8" VerticalAlignment="Bottom" FontSize="20" Foreground="{DynamicResource MaterialDesign.Brush.Primary.Foreground}" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0:tt}}" /> </StackPanel> </Border> <Grid Grid.Row="1" Margin="24" VerticalAlignment="Center"> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="auto" /> </Grid.RowDefinitions> <Ellipse x:Name="BackgroundEllipse" Width="230" Height="230" Fill="{DynamicResource MaterialDesign.Brush.Primary.Light}" Opacity=".23" /> <Canvas x:Name="PART_HoursCanvas" Width="230" Height="230" RenderTransformOrigin=".5,.5"> <Path x:Name="HourLine" Canvas.Left="113.625" Canvas.Top="19.047" Width="3" Height="96.959" Data="M2.25,95.515 C2.25,96.036356 1.8582492,96.459 1.375,96.459 C0.89175084,96.459 0.5,96.036356 0.5,95.515 C0.5,94.993643 0.89175084,94.571 1.375,94.571 C1.8582492,94.571 2.25,94.993643 2.25,95.515 z M1.375,95.469003 L1.375,0.50000001" Fill="{DynamicResource MaterialDesign.Brush.Primary}" RenderTransformOrigin="0.5,0.985" Stretch="Fill" Stroke="{DynamicResource MaterialDesign.Brush.Primary}"> <Path.RenderTransform> <RotateTransform Angle="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Converter={x:Static converters:ClockLineConverter.HoursInstance}}" /> </Path.RenderTransform> </Path> <Canvas.RenderTransform> <ScaleTransform x:Name="HoursScaleTransform" ScaleX="1" ScaleY="1" /> </Canvas.RenderTransform> </Canvas> <Canvas x:Name="PART_MinutesCanvas" Width="230" Height="230" IsHitTestVisible="False" Opacity="0" RenderTransformOrigin=".5,.5"> <Path x:Name="MinuteLine" Canvas.Left="113.625" Canvas.Top="19.047" Width="3" Height="96.959" Data="M2.25,95.515 C2.25,96.036356 1.8582492,96.459 1.375,96.459 C0.89175084,96.459 0.5,96.036356 0.5,95.515 C0.5,94.993643 0.89175084,94.571 1.375,94.571 C1.8582492,94.571 2.25,94.993643 2.25,95.515 z M1.375,95.469003 L1.375,0.50000001" Fill="{DynamicResource MaterialDesign.Brush.Primary}" RenderTransformOrigin="0.5,0.985" Stretch="Fill" Stroke="{DynamicResource MaterialDesign.Brush.Primary}"> <Path.RenderTransform> <RotateTransform Angle="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Converter={x:Static converters:ClockLineConverter.MinutesInstance}}" /> </Path.RenderTransform> </Path> <Canvas.RenderTransform> <ScaleTransform x:Name="MinutesScaleTransform" ScaleX="1" ScaleY="1" /> </Canvas.RenderTransform> </Canvas> <Canvas x:Name="PART_SecondsCanvas" Width="230" Height="230" IsHitTestVisible="False" Opacity="0" RenderTransformOrigin=".5,.5"> <Path x:Name="SecondLine" Canvas.Left="113.625" Canvas.Top="19.047" Width="3" Height="96.959" Data="M2.25,95.515 C2.25,96.036356 1.8582492,96.459 1.375,96.459 C0.89175084,96.459 0.5,96.036356 0.5,95.515 C0.5,94.993643 0.89175084,94.571 1.375,94.571 C1.8582492,94.571 2.25,94.993643 2.25,95.515 z M1.375,95.469003 L1.375,0.50000001" Fill="{DynamicResource MaterialDesign.Brush.Primary}" RenderTransformOrigin="0.5,0.985" Stretch="Fill" Stroke="{DynamicResource MaterialDesign.Brush.Primary}"> <Path.RenderTransform> <RotateTransform Angle="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Converter={x:Static converters:ClockLineConverter.SecondsInstance}}" /> </Path.RenderTransform> </Path> <Canvas.RenderTransform> <ScaleTransform x:Name="SecondsScaleTransform" ScaleX="1" ScaleY="1" /> </Canvas.RenderTransform> </Canvas> <UniformGrid Grid.Row="1" Rows="1"> <RadioButton x:Name="AMRadioButton" Width="47.333" Height="47.333" Margin="0,0,30,0" HorizontalAlignment="Center" VerticalAlignment="Bottom" Content="AM" IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsPostMeridiem, Converter={x:Static converters:NotConverter.Instance}}" Style="{StaticResource MaterialDesignCalendarMeridiemRadioButton}" /> <RadioButton x:Name="PMRadioButton" Width="47.333" Height="47.333" Margin="30,0,0,0" HorizontalAlignment="Center" VerticalAlignment="Bottom" Content="PM" IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsPostMeridiem}" Style="{StaticResource MaterialDesignCalendarMeridiemRadioButton}" /> </UniformGrid> </Grid> </Grid> </Border> <ControlTemplate.Triggers> <Trigger Property="Is24Hours" Value="True"> <Setter TargetName="AMRadioButton" Property="Visibility" Value="Collapsed" /> <Setter TargetName="AmPmReadout" Property="Visibility" Value="Collapsed" /> <Setter TargetName="PART_HourReadOutText" Property="Text" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0:HH}}" /> <Setter TargetName="PMRadioButton" Property="Visibility" Value="Collapsed" /> </Trigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="Is24Hours" Value="True" /> <Condition Property="IsPostMeridiem" Value="False" /> <Condition Property="IsMidnightHour" Value="False" /> </MultiTrigger.Conditions> <Setter TargetName="HourLine" Property="Canvas.Top" Value="40" /> <Setter TargetName="HourLine" Property="Height" Value="76" /> </MultiTrigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="Is24Hours" Value="True" /> <Condition Property="IsMiddayHour" Value="True" /> </MultiTrigger.Conditions> <Setter TargetName="HourLine" Property="Canvas.Top" Value="40" /> <Setter TargetName="HourLine" Property="Height" Value="76" /> </MultiTrigger> <Trigger Property="DisplayAutomation" Value="{x:Static wpf:ClockDisplayAutomation.None}"> <Setter TargetName="PART_SecondColonPrefix" Property="Visibility" Value="Collapsed" /> <Setter TargetName="PART_SecondReadOut" Property="Visibility" Value="Collapsed" /> </Trigger> <Trigger Property="DisplayAutomation" Value="{x:Static wpf:ClockDisplayAutomation.Cycle}"> <Setter TargetName="PART_SecondColonPrefix" Property="Visibility" Value="Collapsed" /> <Setter TargetName="PART_SecondReadOut" Property="Visibility" Value="Collapsed" /> </Trigger> <Trigger Property="DisplayAutomation" Value="{x:Static wpf:ClockDisplayAutomation.ToMinutesOnly}"> <Setter TargetName="PART_SecondColonPrefix" Property="Visibility" Value="Collapsed" /> <Setter TargetName="PART_SecondReadOut" Property="Visibility" Value="Collapsed" /> </Trigger> <Trigger Property="DisplayAutomation" Value="{x:Static wpf:ClockDisplayAutomation.ToSeconds}"> <Setter TargetName="PART_SecondColonPrefix" Property="Visibility" Value="Visible" /> <Setter TargetName="PART_SecondReadOut" Property="Visibility" Value="Visible" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="MaterialDesignClockVertical" TargetType="{x:Type wpf:Clock}"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Background}" /> <Setter Property="BorderThickness" Value="1" /> <Setter Property="ButtonRadiusInnerRatio" Value=".6" /> <Setter Property="ButtonRadiusRatio" Value=".835" /> <Setter Property="ButtonStyle"> <Setter.Value> <Style TargetType="{x:Type wpf:ClockItemButton}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="Canvas.ZIndex" Value="0" /> <Setter Property="Height" Value="32" /> <Setter Property="HorizontalContentAlignment" Value="Center" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type wpf:ClockItemButton}"> <Grid> <Thumb x:Name="PART_Thumb" Background="{TemplateBinding Background}" Opacity="23" Style="{StaticResource MaterialDesignClockItemThumb}" /> <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content="{TemplateBinding Content}" IsHitTestVisible="False" /> </Grid> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="Width" Value="32" /> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" /> </Trigger> <Trigger Property="IsChecked" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Foreground}" /> </Trigger> </Style.Triggers> </Style> </Setter.Value> </Setter> <Setter Property="CornerRadius" Value="8" /> <Setter Property="FlowDirection" Value="LeftToRight" /> <Setter Property="IsHeaderVisible" Value="True" /> <Setter Property="LesserButtonStyle"> <Setter.Value> <Style TargetType="{x:Type wpf:ClockItemButton}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="Canvas.ZIndex" Value="1" /> <Setter Property="Height" Value="12" /> <Setter Property="HorizontalContentAlignment" Value="Center" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type wpf:ClockItemButton}"> <Grid> <Thumb x:Name="PART_Thumb" Background="{TemplateBinding Background}" Opacity=".52" Style="{StaticResource MaterialDesignClockItemThumb}" ToolTip="{TemplateBinding Content}" /> <Ellipse Width="6" Height="6" HorizontalAlignment="Center" VerticalAlignment="Center" Fill="{TemplateBinding Background}" IsHitTestVisible="False" /> </Grid> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="Width" Value="12" /> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" /> </Trigger> <Trigger Property="IsChecked" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> </Trigger> </Style.Triggers> </Style> </Setter.Value> </Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type wpf:Clock}"> <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="DisplayModeStates"> <VisualStateGroup.Transitions> <VisualTransition From="*" To="Hours"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1.2" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1.2" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=".85"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=".85"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> <VisualTransition From="Hours" To="Minutes"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> <VisualTransition From="Minutes" To="Seconds"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> <VisualTransition From="Hours" To="Seconds"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> <VisualTransition From="Seconds" To="Minutes"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=".85"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=".85"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1.2" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1.2" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> </VisualStateGroup.Transitions> <VisualState x:Name="Hours"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY" To="1" Duration="0" /> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX" To=".85" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY" To=".85" Duration="0" /> <DoubleAnimation Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX" To=".85" Duration="0" /> <DoubleAnimation Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY" To=".85" Duration="0" /> </Storyboard> </VisualState> <VisualState x:Name="Minutes"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX" To="1.2" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY" To="1.2" Duration="0" /> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY" To="1" Duration="0" /> </Storyboard> </VisualState> <VisualState x:Name="Seconds"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX" To="1.2" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY" To="1.2" Duration="0" /> <DoubleAnimation Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX" To="1.2" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY" To="1.2" Duration="0" /> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY" To="1" Duration="0" /> </Storyboard> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> <Grid Margin="24"> <Grid.RowDefinitions> <RowDefinition Height="auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <!--#region Time Display--> <Border Margin="0,0,0,36" HorizontalAlignment="Center" Visibility="{TemplateBinding IsHeaderVisible, Converter={x:Static converters:BooleanToVisibilityConverter.CollapsedInstance}}"> <StackPanel Orientation="Horizontal"> <StackPanel x:Name="TimeReadoutStackPanel" HorizontalAlignment="Right" VerticalAlignment="Center" Orientation="Horizontal"> <StackPanel.Resources> <Style x:Key="TimeTextBlock" TargetType="{x:Type TextBlock}"> <Setter Property="FontSize" Value="48" /> <Setter Property="FontWeight" Value="Normal" /> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" /> </Style> </StackPanel.Resources> <Grid x:Name="PART_HourReadOut" Width="96" Height="80"> <Border x:Name="PART_HourReadOutBorder" CornerRadius="{TemplateBinding CornerRadius}" Opacity=".12"> <Border.Style> <Style TargetType="Border"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.ForegroundLight}" /> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Hours}"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> </DataTrigger> </Style.Triggers> </Style> </Border.Style> </Border> <TextBlock x:Name="PART_HourReadOutText" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0:%h}}"> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TimeTextBlock}"> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Hours}"> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> </Grid> <TextBlock Margin="-6,0,-6,0" VerticalAlignment="Center" Foreground="{DynamicResource MaterialDesign.Brush.Foreground}" Style="{StaticResource TimeTextBlock}" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0: : }}" /> <Grid x:Name="PART_MinuteReadOut" Width="96" Height="80"> <Border x:Name="PART_MinuteReadOutBorder" CornerRadius="{TemplateBinding CornerRadius}" Opacity=".12"> <Border.Style> <Style TargetType="Border"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.ForegroundLight}" /> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Minutes}"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> </DataTrigger> </Style.Triggers> </Style> </Border.Style> </Border> <TextBlock x:Name="PART_MinuteReadOutText" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0:mm}}"> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TimeTextBlock}"> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Minutes}"> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> </Grid> <TextBlock x:Name="PART_SecondColonPrefix" Margin="-6,0,-6,0" VerticalAlignment="Center" Foreground="{DynamicResource MaterialDesign.Brush.Foreground}" Style="{StaticResource TimeTextBlock}" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0: : }}" /> <Grid x:Name="PART_SecondReadOut" Width="96" Height="80"> <Border x:Name="PART_SecondReadOutBorder" CornerRadius="{TemplateBinding CornerRadius}" Opacity=".12"> <Border.Style> <Style TargetType="Border"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.ForegroundLight}" /> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Seconds}"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> </DataTrigger> </Style.Triggers> </Style> </Border.Style> </Border> <TextBlock x:Name="PART_SecondReadOutText" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0:ss}}"> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TimeTextBlock}"> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Seconds}"> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> </Grid> </StackPanel> <Border x:Name="AmPmBorder" Height="80" Margin="12,0,0,0" VerticalAlignment="Center" CornerRadius="{TemplateBinding CornerRadius}"> <StackPanel> <StackPanel.Clip> <MultiBinding Converter="{x:Static converters:BorderClipConverter.Instance}"> <Binding ElementName="AmPmBorder" Path="ActualWidth" /> <Binding ElementName="AmPmBorder" Path="ActualHeight" /> <Binding ElementName="AmPmBorder" Path="CornerRadius" /> <Binding ElementName="AmPmBorder" Path="BorderThickness" /> </MultiBinding> </StackPanel.Clip> <RadioButton x:Name="AMRadioButton" Width="52" Height="40" Content="AM" IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsPostMeridiem, Converter={x:Static converters:NotConverter.Instance}}" Style="{StaticResource MaterialDesignCalendarMeridiemRadioButtonDefault}" /> <RadioButton x:Name="PMRadioButton" Width="52" Height="40" Content="PM" IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsPostMeridiem}" Style="{StaticResource MaterialDesignCalendarMeridiemRadioButtonDefault}" /> </StackPanel> </Border> </StackPanel> </Border> <!--#endregion--> <!--#region Clock circle--> <Grid Grid.Row="1" VerticalAlignment="Top"> <Ellipse x:Name="BackgroundEllipse" Width="230" Height="230" Fill="{DynamicResource MaterialDesign.Brush.ForegroundLight}" Opacity=".12" /> <Canvas x:Name="PART_HoursCanvas" Width="230" Height="230" RenderTransformOrigin=".5,.5"> <Path x:Name="HourLine" Canvas.Left="113.625" Canvas.Top="19.047" Width="3" Height="96.959" Data="M2.25,95.515 C2.25,96.036356 1.8582492,96.459 1.375,96.459 C0.89175084,96.459 0.5,96.036356 0.5,95.515 C0.5,94.993643 0.89175084,94.571 1.375,94.571 C1.8582492,94.571 2.25,94.993643 2.25,95.515 z M1.375,95.469003 L1.375,0.50000001" Fill="{DynamicResource MaterialDesign.Brush.Primary}" RenderTransformOrigin="0.5,0.985" Stretch="Fill" Stroke="{DynamicResource MaterialDesign.Brush.Primary}"> <Path.RenderTransform> <RotateTransform Angle="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Converter={x:Static converters:ClockLineConverter.HoursInstance}}" /> </Path.RenderTransform> </Path> <Canvas.RenderTransform> <ScaleTransform x:Name="HoursScaleTransform" ScaleX="1" ScaleY="1" /> </Canvas.RenderTransform> </Canvas> <Canvas x:Name="PART_MinutesCanvas" Width="230" Height="230" IsHitTestVisible="False" Opacity="0" RenderTransformOrigin=".5,.5"> <Path x:Name="MinuteLine" Canvas.Left="113.625" Canvas.Top="19.047" Width="3" Height="96.959" Data="M2.25,95.515 C2.25,96.036356 1.8582492,96.459 1.375,96.459 C0.89175084,96.459 0.5,96.036356 0.5,95.515 C0.5,94.993643 0.89175084,94.571 1.375,94.571 C1.8582492,94.571 2.25,94.993643 2.25,95.515 z M1.375,95.469003 L1.375,0.50000001" Fill="{DynamicResource MaterialDesign.Brush.Primary}" RenderTransformOrigin="0.5,0.985" Stretch="Fill" Stroke="{DynamicResource MaterialDesign.Brush.Primary}"> <Path.RenderTransform> <RotateTransform Angle="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Converter={x:Static converters:ClockLineConverter.MinutesInstance}}" /> </Path.RenderTransform> </Path> <Canvas.RenderTransform> <ScaleTransform x:Name="MinutesScaleTransform" ScaleX="1" ScaleY="1" /> </Canvas.RenderTransform> </Canvas> <Canvas x:Name="PART_SecondsCanvas" Width="230" Height="230" IsHitTestVisible="False" Opacity="0" RenderTransformOrigin=".5,.5"> <Path x:Name="SecondLine" Canvas.Left="113.625" Canvas.Top="19.047" Width="3" Height="96.959" Data="M2.25,95.515 C2.25,96.036356 1.8582492,96.459 1.375,96.459 C0.89175084,96.459 0.5,96.036356 0.5,95.515 C0.5,94.993643 0.89175084,94.571 1.375,94.571 C1.8582492,94.571 2.25,94.993643 2.25,95.515 z M1.375,95.469003 L1.375,0.50000001" Fill="{DynamicResource MaterialDesign.Brush.Primary}" RenderTransformOrigin="0.5,0.985" Stretch="Fill" Stroke="{DynamicResource MaterialDesign.Brush.Primary}"> <Path.RenderTransform> <RotateTransform Angle="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Converter={x:Static converters:ClockLineConverter.SecondsInstance}}" /> </Path.RenderTransform> </Path> <Canvas.RenderTransform> <ScaleTransform x:Name="SecondsScaleTransform" ScaleX="1" ScaleY="1" /> </Canvas.RenderTransform> </Canvas> </Grid> <!--#endregion--> </Grid> </Border> <ControlTemplate.Triggers> <Trigger Property="Is24Hours" Value="True"> <Setter TargetName="AmPmBorder" Property="Visibility" Value="Collapsed" /> <Setter TargetName="PART_HourReadOutText" Property="Text" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0:HH}}" /> </Trigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="Is24Hours" Value="True" /> <Condition Property="IsPostMeridiem" Value="False" /> <Condition Property="IsMidnightHour" Value="False" /> </MultiTrigger.Conditions> <Setter TargetName="HourLine" Property="Canvas.Top" Value="40" /> <Setter TargetName="HourLine" Property="Height" Value="76" /> </MultiTrigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="Is24Hours" Value="True" /> <Condition Property="IsMiddayHour" Value="True" /> </MultiTrigger.Conditions> <Setter TargetName="HourLine" Property="Canvas.Top" Value="40" /> <Setter TargetName="HourLine" Property="Height" Value="76" /> </MultiTrigger> <Trigger Property="DisplayAutomation" Value="{x:Static wpf:ClockDisplayAutomation.None}"> <Setter TargetName="PART_SecondColonPrefix" Property="Visibility" Value="Collapsed" /> <Setter TargetName="PART_SecondReadOut" Property="Visibility" Value="Collapsed" /> </Trigger> <Trigger Property="DisplayAutomation" Value="{x:Static wpf:ClockDisplayAutomation.Cycle}"> <Setter TargetName="PART_SecondColonPrefix" Property="Visibility" Value="Collapsed" /> <Setter TargetName="PART_SecondReadOut" Property="Visibility" Value="Collapsed" /> </Trigger> <Trigger Property="DisplayAutomation" Value="{x:Static wpf:ClockDisplayAutomation.ToMinutesOnly}"> <Setter TargetName="PART_SecondColonPrefix" Property="Visibility" Value="Collapsed" /> <Setter TargetName="PART_SecondReadOut" Property="Visibility" Value="Collapsed" /> </Trigger> <Trigger Property="DisplayAutomation" Value="{x:Static wpf:ClockDisplayAutomation.ToSeconds}"> <Setter TargetName="PART_SecondColonPrefix" Property="Visibility" Value="Visible" /> <Setter TargetName="PART_SecondReadOut" Property="Visibility" Value="Visible" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="MaterialDesignClockVerticalThemed" TargetType="{x:Type wpf:Clock}"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark}" /> <Setter Property="BorderThickness" Value="1" /> <Setter Property="ButtonRadiusInnerRatio" Value=".6" /> <Setter Property="ButtonRadiusRatio" Value=".835" /> <Setter Property="ButtonStyle"> <Setter.Value> <Style TargetType="{x:Type wpf:ClockItemButton}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="Canvas.ZIndex" Value="0" /> <Setter Property="Height" Value="32" /> <Setter Property="HorizontalContentAlignment" Value="Center" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type wpf:ClockItemButton}"> <Grid> <Thumb x:Name="PART_Thumb" Background="{TemplateBinding Background}" Opacity="23" Style="{StaticResource MaterialDesignClockItemThumb}" /> <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content="{TemplateBinding Content}" IsHitTestVisible="False" /> </Grid> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="Width" Value="32" /> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light}" /> </Trigger> <Trigger Property="IsChecked" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary}" /> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Foreground}" /> </Trigger> </Style.Triggers> </Style> </Setter.Value> </Setter> <Setter Property="CornerRadius" Value="8" /> <Setter Property="FlowDirection" Value="LeftToRight" /> <Setter Property="IsHeaderVisible" Value="True" /> <Setter Property="LesserButtonStyle"> <Setter.Value> <Style TargetType="{x:Type wpf:ClockItemButton}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="Canvas.ZIndex" Value="1" /> <Setter Property="Height" Value="12" /> <Setter Property="HorizontalContentAlignment" Value="Center" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type wpf:ClockItemButton}"> <Grid> <Thumb x:Name="PART_Thumb" Background="{TemplateBinding Background}" Opacity=".52" Style="{StaticResource MaterialDesignClockItemThumb}" ToolTip="{TemplateBinding Content}" /> <Ellipse Width="6" Height="6" HorizontalAlignment="Center" VerticalAlignment="Center" Fill="{TemplateBinding Background}" IsHitTestVisible="False" /> </Grid> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="Width" Value="12" /> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light}" /> </Trigger> <Trigger Property="IsChecked" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary}" /> </Trigger> </Style.Triggers> </Style> </Setter.Value> </Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type wpf:Clock}"> <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="DisplayModeStates"> <VisualStateGroup.Transitions> <VisualTransition From="*" To="Hours"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1.2" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1.2" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=".85"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=".85"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> <VisualTransition From="Hours" To="Minutes"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> <VisualTransition From="Minutes" To="Seconds"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> <VisualTransition From="Hours" To="Seconds"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> <VisualTransition From="Seconds" To="Minutes"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=".85"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=".85"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1.2" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1.2" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> </VisualStateGroup.Transitions> <VisualState x:Name="Hours"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY" To="1" Duration="0" /> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX" To=".85" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY" To=".85" Duration="0" /> <DoubleAnimation Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX" To=".85" Duration="0" /> <DoubleAnimation Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY" To=".85" Duration="0" /> </Storyboard> </VisualState> <VisualState x:Name="Minutes"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX" To="1.2" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY" To="1.2" Duration="0" /> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY" To="1" Duration="0" /> </Storyboard> </VisualState> <VisualState x:Name="Seconds"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX" To="1.2" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY" To="1.2" Duration="0" /> <DoubleAnimation Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX" To="1.2" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY" To="1.2" Duration="0" /> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY" To="1" Duration="0" /> </Storyboard> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> <Grid Margin="24"> <Grid.RowDefinitions> <RowDefinition Height="auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <!--#region Time Display--> <Border Margin="0,0,0,36" HorizontalAlignment="Center" Visibility="{TemplateBinding IsHeaderVisible, Converter={x:Static converters:BooleanToVisibilityConverter.CollapsedInstance}}"> <StackPanel Orientation="Horizontal"> <StackPanel x:Name="TimeReadoutStackPanel" HorizontalAlignment="Right" VerticalAlignment="Center" Orientation="Horizontal"> <StackPanel.Resources> <Style x:Key="TimeTextBlock" TargetType="{x:Type TextBlock}"> <Setter Property="FontSize" Value="48" /> <Setter Property="FontWeight" Value="Normal" /> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Foreground}" /> </Style> </StackPanel.Resources> <Grid x:Name="PART_HourReadOut" Width="96" Height="80"> <Border x:Name="PART_HourReadOutBorder" CornerRadius="{TemplateBinding CornerRadius}"> <Border.Style> <Style TargetType="Border"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Hours}"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary}" /> </DataTrigger> </Style.Triggers> </Style> </Border.Style> </Border> <TextBlock x:Name="PART_HourReadOutText" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0:%h}}"> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TimeTextBlock}"> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Hours}"> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Foreground}" /> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> </Grid> <TextBlock Margin="-6,0,-6,0" VerticalAlignment="Center" Foreground="{DynamicResource MaterialDesign.Brush.Primary.Dark.Foreground}" Style="{StaticResource TimeTextBlock}" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0: : }}" /> <Grid x:Name="PART_MinuteReadOut" Width="96" Height="80"> <Border x:Name="PART_MinuteReadOutBorder" CornerRadius="{TemplateBinding CornerRadius}"> <Border.Style> <Style TargetType="Border"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Minutes}"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary}" /> </DataTrigger> </Style.Triggers> </Style> </Border.Style> </Border> <TextBlock x:Name="PART_MinuteReadOutText" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0:mm}}"> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TimeTextBlock}"> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Minutes}"> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Foreground}" /> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> </Grid> <TextBlock x:Name="PART_SecondColonPrefix" Margin="-6,0,-6,0" VerticalAlignment="Center" Foreground="{DynamicResource MaterialDesign.Brush.Primary.Dark.Foreground}" Style="{StaticResource TimeTextBlock}" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0: : }}" /> <Grid x:Name="PART_SecondReadOut" Width="96" Height="80"> <Border x:Name="PART_SecondReadOutBorder" CornerRadius="{TemplateBinding CornerRadius}"> <Border.Style> <Style TargetType="Border"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Seconds}"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary}" /> </DataTrigger> </Style.Triggers> </Style> </Border.Style> </Border> <TextBlock x:Name="PART_SecondReadOutText" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0:ss}}"> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TimeTextBlock}"> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Seconds}"> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Foreground}" /> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> </Grid> </StackPanel> <Border x:Name="AmPmBorder" Height="80" Margin="12,0,0,0" VerticalAlignment="Center" CornerRadius="{TemplateBinding CornerRadius}"> <StackPanel> <StackPanel.Clip> <MultiBinding Converter="{x:Static converters:BorderClipConverter.Instance}"> <Binding ElementName="AmPmBorder" Path="ActualWidth" /> <Binding ElementName="AmPmBorder" Path="ActualHeight" /> <Binding ElementName="AmPmBorder" Path="CornerRadius" /> <Binding ElementName="AmPmBorder" Path="BorderThickness" /> </MultiBinding> </StackPanel.Clip> <RadioButton x:Name="AMRadioButton" Width="52" Height="40" Content="AM" IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsPostMeridiem, Converter={x:Static converters:NotConverter.Instance}}" Style="{StaticResource MaterialDesignCalendarMeridiemRadioButtonThemed}" /> <RadioButton x:Name="PMRadioButton" Width="52" Height="40" Content="PM" IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsPostMeridiem}" Style="{StaticResource MaterialDesignCalendarMeridiemRadioButtonThemed}" /> </StackPanel> </Border> </StackPanel> </Border> <!--#endregion--> <!--#region Clock circle--> <Grid Grid.Row="1" VerticalAlignment="Top"> <Ellipse x:Name="BackgroundEllipse" Width="230" Height="230" Fill="{DynamicResource MaterialDesign.Brush.Primary}" /> <Canvas x:Name="PART_HoursCanvas" Width="230" Height="230" RenderTransformOrigin=".5,.5"> <Path x:Name="HourLine" Canvas.Left="113.625" Canvas.Top="19.047" Width="3" Height="96.959" Data="M2.25,95.515 C2.25,96.036356 1.8582492,96.459 1.375,96.459 C0.89175084,96.459 0.5,96.036356 0.5,95.515 C0.5,94.993643 0.89175084,94.571 1.375,94.571 C1.8582492,94.571 2.25,94.993643 2.25,95.515 z M1.375,95.469003 L1.375,0.50000001" Fill="{DynamicResource MaterialDesign.Brush.Secondary}" RenderTransformOrigin="0.5,0.985" Stretch="Fill" Stroke="{DynamicResource MaterialDesign.Brush.Secondary}"> <Path.RenderTransform> <RotateTransform Angle="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Converter={x:Static converters:ClockLineConverter.HoursInstance}}" /> </Path.RenderTransform> </Path> <Canvas.RenderTransform> <ScaleTransform x:Name="HoursScaleTransform" ScaleX="1" ScaleY="1" /> </Canvas.RenderTransform> </Canvas> <Canvas x:Name="PART_MinutesCanvas" Width="230" Height="230" IsHitTestVisible="False" Opacity="0" RenderTransformOrigin=".5,.5"> <Path x:Name="MinuteLine" Canvas.Left="113.625" Canvas.Top="19.047" Width="3" Height="96.959" Data="M2.25,95.515 C2.25,96.036356 1.8582492,96.459 1.375,96.459 C0.89175084,96.459 0.5,96.036356 0.5,95.515 C0.5,94.993643 0.89175084,94.571 1.375,94.571 C1.8582492,94.571 2.25,94.993643 2.25,95.515 z M1.375,95.469003 L1.375,0.50000001" Fill="{DynamicResource MaterialDesign.Brush.Secondary}" RenderTransformOrigin="0.5,0.985" Stretch="Fill" Stroke="{DynamicResource MaterialDesign.Brush.Secondary}"> <Path.RenderTransform> <RotateTransform Angle="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Converter={x:Static converters:ClockLineConverter.MinutesInstance}}" /> </Path.RenderTransform> </Path> <Canvas.RenderTransform> <ScaleTransform x:Name="MinutesScaleTransform" ScaleX="1" ScaleY="1" /> </Canvas.RenderTransform> </Canvas> <Canvas x:Name="PART_SecondsCanvas" Width="230" Height="230" IsHitTestVisible="False" Opacity="0" RenderTransformOrigin=".5,.5"> <Path x:Name="SecondLine" Canvas.Left="113.625" Canvas.Top="19.047" Width="3" Height="96.959" Data="M2.25,95.515 C2.25,96.036356 1.8582492,96.459 1.375,96.459 C0.89175084,96.459 0.5,96.036356 0.5,95.515 C0.5,94.993643 0.89175084,94.571 1.375,94.571 C1.8582492,94.571 2.25,94.993643 2.25,95.515 z M1.375,95.469003 L1.375,0.50000001" Fill="{DynamicResource MaterialDesign.Brush.Secondary}" RenderTransformOrigin="0.5,0.985" Stretch="Fill" Stroke="{DynamicResource MaterialDesign.Brush.Secondary}"> <Path.RenderTransform> <RotateTransform Angle="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Converter={x:Static converters:ClockLineConverter.SecondsInstance}}" /> </Path.RenderTransform> </Path> <Canvas.RenderTransform> <ScaleTransform x:Name="SecondsScaleTransform" ScaleX="1" ScaleY="1" /> </Canvas.RenderTransform> </Canvas> </Grid> <!--#endregion--> </Grid> </Border> <ControlTemplate.Triggers> <Trigger Property="Is24Hours" Value="True"> <Setter TargetName="AmPmBorder" Property="Visibility" Value="Collapsed" /> <Setter TargetName="PART_HourReadOutText" Property="Text" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0:HH}}" /> </Trigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="Is24Hours" Value="True" /> <Condition Property="IsPostMeridiem" Value="False" /> <Condition Property="IsMidnightHour" Value="False" /> </MultiTrigger.Conditions> <Setter TargetName="HourLine" Property="Canvas.Top" Value="40" /> <Setter TargetName="HourLine" Property="Height" Value="76" /> </MultiTrigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="Is24Hours" Value="True" /> <Condition Property="IsMiddayHour" Value="True" /> </MultiTrigger.Conditions> <Setter TargetName="HourLine" Property="Canvas.Top" Value="40" /> <Setter TargetName="HourLine" Property="Height" Value="76" /> </MultiTrigger> <Trigger Property="DisplayAutomation" Value="{x:Static wpf:ClockDisplayAutomation.None}"> <Setter TargetName="PART_SecondColonPrefix" Property="Visibility" Value="Collapsed" /> <Setter TargetName="PART_SecondReadOut" Property="Visibility" Value="Collapsed" /> </Trigger> <Trigger Property="DisplayAutomation" Value="{x:Static wpf:ClockDisplayAutomation.Cycle}"> <Setter TargetName="PART_SecondColonPrefix" Property="Visibility" Value="Collapsed" /> <Setter TargetName="PART_SecondReadOut" Property="Visibility" Value="Collapsed" /> </Trigger> <Trigger Property="DisplayAutomation" Value="{x:Static wpf:ClockDisplayAutomation.ToMinutesOnly}"> <Setter TargetName="PART_SecondColonPrefix" Property="Visibility" Value="Collapsed" /> <Setter TargetName="PART_SecondReadOut" Property="Visibility" Value="Collapsed" /> </Trigger> <Trigger Property="DisplayAutomation" Value="{x:Static wpf:ClockDisplayAutomation.ToSeconds}"> <Setter TargetName="PART_SecondColonPrefix" Property="Visibility" Value="Visible" /> <Setter TargetName="PART_SecondReadOut" Property="Visibility" Value="Visible" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="MaterialDesignClockHorizontal" TargetType="{x:Type wpf:Clock}"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Background}" /> <Setter Property="BorderThickness" Value="1" /> <Setter Property="ButtonRadiusInnerRatio" Value=".6" /> <Setter Property="ButtonRadiusRatio" Value=".835" /> <Setter Property="ButtonStyle"> <Setter.Value> <Style TargetType="{x:Type wpf:ClockItemButton}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="Canvas.ZIndex" Value="0" /> <Setter Property="Height" Value="32" /> <Setter Property="HorizontalContentAlignment" Value="Center" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type wpf:ClockItemButton}"> <Grid> <Thumb x:Name="PART_Thumb" Background="{TemplateBinding Background}" Opacity="23" Style="{StaticResource MaterialDesignClockItemThumb}" /> <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content="{TemplateBinding Content}" IsHitTestVisible="False" /> </Grid> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="Width" Value="32" /> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" /> </Trigger> <Trigger Property="IsChecked" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Foreground}" /> </Trigger> </Style.Triggers> </Style> </Setter.Value> </Setter> <Setter Property="CornerRadius" Value="8" /> <Setter Property="FlowDirection" Value="LeftToRight" /> <Setter Property="IsHeaderVisible" Value="True" /> <Setter Property="LesserButtonStyle"> <Setter.Value> <Style TargetType="{x:Type wpf:ClockItemButton}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="Canvas.ZIndex" Value="1" /> <Setter Property="Height" Value="12" /> <Setter Property="HorizontalContentAlignment" Value="Center" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type wpf:ClockItemButton}"> <Grid> <Thumb x:Name="PART_Thumb" Background="{TemplateBinding Background}" Opacity=".52" Style="{StaticResource MaterialDesignClockItemThumb}" ToolTip="{TemplateBinding Content}" /> <Ellipse Width="6" Height="6" HorizontalAlignment="Center" VerticalAlignment="Center" Fill="{TemplateBinding Background}" IsHitTestVisible="False" /> </Grid> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="Width" Value="12" /> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary.Light}" /> </Trigger> <Trigger Property="IsChecked" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> </Trigger> </Style.Triggers> </Style> </Setter.Value> </Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type wpf:Clock}"> <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="DisplayModeStates"> <VisualStateGroup.Transitions> <VisualTransition From="*" To="Hours"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1.2" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1.2" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=".85"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=".85"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> <VisualTransition From="Hours" To="Minutes"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> <VisualTransition From="Minutes" To="Seconds"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> <VisualTransition From="Hours" To="Seconds"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> <VisualTransition From="Seconds" To="Minutes"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=".85"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=".85"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1.2" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1.2" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> </VisualStateGroup.Transitions> <VisualState x:Name="Hours"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY" To="1" Duration="0" /> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX" To=".85" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY" To=".85" Duration="0" /> <DoubleAnimation Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX" To=".85" Duration="0" /> <DoubleAnimation Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY" To=".85" Duration="0" /> </Storyboard> </VisualState> <VisualState x:Name="Minutes"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX" To="1.2" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY" To="1.2" Duration="0" /> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY" To="1" Duration="0" /> </Storyboard> </VisualState> <VisualState x:Name="Seconds"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX" To="1.2" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY" To="1.2" Duration="0" /> <DoubleAnimation Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX" To="1.2" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY" To="1.2" Duration="0" /> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY" To="1" Duration="0" /> </Storyboard> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> <Grid Margin="24" VerticalAlignment="Center"> <Grid.ColumnDefinitions> <ColumnDefinition Width="auto" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <!--#region Time Display--> <Border Margin="0,0,52,0" VerticalAlignment="Center" Visibility="{TemplateBinding IsHeaderVisible, Converter={x:Static converters:BooleanToVisibilityConverter.CollapsedInstance}}"> <StackPanel> <StackPanel x:Name="TimeReadoutStackPanel" HorizontalAlignment="Right" VerticalAlignment="Center" Orientation="Horizontal"> <StackPanel.Resources> <Style x:Key="TimeTextBlock" TargetType="{x:Type TextBlock}"> <Setter Property="FontSize" Value="48" /> <Setter Property="FontWeight" Value="Normal" /> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" /> </Style> </StackPanel.Resources> <Grid x:Name="PART_HourReadOut" Width="96" Height="80"> <Border x:Name="PART_HourReadOutBorder" CornerRadius="{TemplateBinding CornerRadius}" Opacity=".12"> <Border.Style> <Style TargetType="Border"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.ForegroundLight}" /> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Hours}"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> </DataTrigger> </Style.Triggers> </Style> </Border.Style> </Border> <TextBlock x:Name="PART_HourReadOutText" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0:%h}}"> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TimeTextBlock}"> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Hours}"> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> </Grid> <TextBlock Margin="-6,0,-6,0" VerticalAlignment="Center" Foreground="{DynamicResource MaterialDesign.Brush.Foreground}" Style="{StaticResource TimeTextBlock}" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0: : }}" /> <Grid x:Name="PART_MinuteReadOut" Width="96" Height="80"> <Border x:Name="PART_MinuteReadOutBorder" CornerRadius="{TemplateBinding CornerRadius}" Opacity=".12"> <Border.Style> <Style TargetType="Border"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.ForegroundLight}" /> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Minutes}"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> </DataTrigger> </Style.Triggers> </Style> </Border.Style> </Border> <TextBlock x:Name="PART_MinuteReadOutText" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0:mm}}"> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TimeTextBlock}"> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Minutes}"> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> </Grid> <TextBlock x:Name="PART_SecondColonPrefix" Margin="-6,0,-6,0" VerticalAlignment="Center" Foreground="{DynamicResource MaterialDesign.Brush.Foreground}" Style="{StaticResource TimeTextBlock}" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0: : }}" /> <Grid x:Name="PART_SecondReadOut" Width="96" Height="80"> <Border x:Name="PART_SecondReadOutBorder" CornerRadius="{TemplateBinding CornerRadius}" Opacity=".12"> <Border.Style> <Style TargetType="Border"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.ForegroundLight}" /> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Seconds}"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> </DataTrigger> </Style.Triggers> </Style> </Border.Style> </Border> <TextBlock x:Name="PART_SecondReadOutText" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0:ss}}"> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TimeTextBlock}"> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Seconds}"> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> </Grid> </StackPanel> <Border x:Name="AmPmBorder" Margin="0,12,0,0" HorizontalAlignment="Stretch" CornerRadius="{TemplateBinding CornerRadius}"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Grid.Clip> <MultiBinding Converter="{x:Static converters:BorderClipConverter.Instance}"> <Binding ElementName="AmPmBorder" Path="ActualWidth" /> <Binding ElementName="AmPmBorder" Path="ActualHeight" /> <Binding ElementName="AmPmBorder" Path="CornerRadius" /> <Binding ElementName="AmPmBorder" Path="BorderThickness" /> </MultiBinding> </Grid.Clip> <RadioButton x:Name="AMRadioButton" Height="40" Content="AM" IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsPostMeridiem, Converter={x:Static converters:NotConverter.Instance}}" Style="{StaticResource MaterialDesignCalendarMeridiemRadioButtonDefault}" /> <RadioButton x:Name="PMRadioButton" Grid.Column="1" Height="40" Content="PM" IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsPostMeridiem}" Style="{StaticResource MaterialDesignCalendarMeridiemRadioButtonDefault}" /> </Grid> </Border> </StackPanel> </Border> <!--#endregion--> <!--#region Clock circle--> <Grid Grid.Column="1" VerticalAlignment="Top"> <Ellipse x:Name="BackgroundEllipse" Width="230" Height="230" Fill="{DynamicResource MaterialDesign.Brush.ForegroundLight}" Opacity=".12" /> <Canvas x:Name="PART_HoursCanvas" Width="230" Height="230" RenderTransformOrigin=".5,.5"> <Path x:Name="HourLine" Canvas.Left="113.625" Canvas.Top="19.047" Width="3" Height="96.959" Data="M2.25,95.515 C2.25,96.036356 1.8582492,96.459 1.375,96.459 C0.89175084,96.459 0.5,96.036356 0.5,95.515 C0.5,94.993643 0.89175084,94.571 1.375,94.571 C1.8582492,94.571 2.25,94.993643 2.25,95.515 z M1.375,95.469003 L1.375,0.50000001" Fill="{DynamicResource MaterialDesign.Brush.Primary}" RenderTransformOrigin="0.5,0.985" Stretch="Fill" Stroke="{DynamicResource MaterialDesign.Brush.Primary}"> <Path.RenderTransform> <RotateTransform Angle="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Converter={x:Static converters:ClockLineConverter.HoursInstance}}" /> </Path.RenderTransform> </Path> <Canvas.RenderTransform> <ScaleTransform x:Name="HoursScaleTransform" ScaleX="1" ScaleY="1" /> </Canvas.RenderTransform> </Canvas> <Canvas x:Name="PART_MinutesCanvas" Width="230" Height="230" IsHitTestVisible="False" Opacity="0" RenderTransformOrigin=".5,.5"> <Path x:Name="MinuteLine" Canvas.Left="113.625" Canvas.Top="19.047" Width="3" Height="96.959" Data="M2.25,95.515 C2.25,96.036356 1.8582492,96.459 1.375,96.459 C0.89175084,96.459 0.5,96.036356 0.5,95.515 C0.5,94.993643 0.89175084,94.571 1.375,94.571 C1.8582492,94.571 2.25,94.993643 2.25,95.515 z M1.375,95.469003 L1.375,0.50000001" Fill="{DynamicResource MaterialDesign.Brush.Primary}" RenderTransformOrigin="0.5,0.985" Stretch="Fill" Stroke="{DynamicResource MaterialDesign.Brush.Primary}"> <Path.RenderTransform> <RotateTransform Angle="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Converter={x:Static converters:ClockLineConverter.MinutesInstance}}" /> </Path.RenderTransform> </Path> <Canvas.RenderTransform> <ScaleTransform x:Name="MinutesScaleTransform" ScaleX="1" ScaleY="1" /> </Canvas.RenderTransform> </Canvas> <Canvas x:Name="PART_SecondsCanvas" Width="230" Height="230" IsHitTestVisible="False" Opacity="0" RenderTransformOrigin=".5,.5"> <Path x:Name="SecondLine" Canvas.Left="113.625" Canvas.Top="19.047" Width="3" Height="96.959" Data="M2.25,95.515 C2.25,96.036356 1.8582492,96.459 1.375,96.459 C0.89175084,96.459 0.5,96.036356 0.5,95.515 C0.5,94.993643 0.89175084,94.571 1.375,94.571 C1.8582492,94.571 2.25,94.993643 2.25,95.515 z M1.375,95.469003 L1.375,0.50000001" Fill="{DynamicResource MaterialDesign.Brush.Primary}" RenderTransformOrigin="0.5,0.985" Stretch="Fill" Stroke="{DynamicResource MaterialDesign.Brush.Primary}"> <Path.RenderTransform> <RotateTransform Angle="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Converter={x:Static converters:ClockLineConverter.SecondsInstance}}" /> </Path.RenderTransform> </Path> <Canvas.RenderTransform> <ScaleTransform x:Name="SecondsScaleTransform" ScaleX="1" ScaleY="1" /> </Canvas.RenderTransform> </Canvas> </Grid> <!--#endregion--> </Grid> </Border> <ControlTemplate.Triggers> <Trigger Property="Is24Hours" Value="True"> <Setter TargetName="AmPmBorder" Property="Visibility" Value="Collapsed" /> <Setter TargetName="PART_HourReadOutText" Property="Text" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0:HH}}" /> </Trigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="Is24Hours" Value="True" /> <Condition Property="IsPostMeridiem" Value="False" /> <Condition Property="IsMidnightHour" Value="False" /> </MultiTrigger.Conditions> <Setter TargetName="HourLine" Property="Canvas.Top" Value="40" /> <Setter TargetName="HourLine" Property="Height" Value="76" /> </MultiTrigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="Is24Hours" Value="True" /> <Condition Property="IsMiddayHour" Value="True" /> </MultiTrigger.Conditions> <Setter TargetName="HourLine" Property="Canvas.Top" Value="40" /> <Setter TargetName="HourLine" Property="Height" Value="76" /> </MultiTrigger> <Trigger Property="DisplayAutomation" Value="{x:Static wpf:ClockDisplayAutomation.None}"> <Setter TargetName="PART_SecondColonPrefix" Property="Visibility" Value="Collapsed" /> <Setter TargetName="PART_SecondReadOut" Property="Visibility" Value="Collapsed" /> </Trigger> <Trigger Property="DisplayAutomation" Value="{x:Static wpf:ClockDisplayAutomation.Cycle}"> <Setter TargetName="PART_SecondColonPrefix" Property="Visibility" Value="Collapsed" /> <Setter TargetName="PART_SecondReadOut" Property="Visibility" Value="Collapsed" /> </Trigger> <Trigger Property="DisplayAutomation" Value="{x:Static wpf:ClockDisplayAutomation.ToMinutesOnly}"> <Setter TargetName="PART_SecondColonPrefix" Property="Visibility" Value="Collapsed" /> <Setter TargetName="PART_SecondReadOut" Property="Visibility" Value="Collapsed" /> </Trigger> <Trigger Property="DisplayAutomation" Value="{x:Static wpf:ClockDisplayAutomation.ToSeconds}"> <Setter TargetName="PART_SecondColonPrefix" Property="Visibility" Value="Visible" /> <Setter TargetName="PART_SecondReadOut" Property="Visibility" Value="Visible" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> <Style x:Key="MaterialDesignClockHorizontalThemed" TargetType="{x:Type wpf:Clock}"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary.Dark}" /> <Setter Property="BorderThickness" Value="1" /> <Setter Property="ButtonRadiusInnerRatio" Value=".6" /> <Setter Property="ButtonRadiusRatio" Value=".835" /> <Setter Property="ButtonStyle"> <Setter.Value> <Style TargetType="{x:Type wpf:ClockItemButton}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="Canvas.ZIndex" Value="0" /> <Setter Property="Height" Value="32" /> <Setter Property="HorizontalContentAlignment" Value="Center" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type wpf:ClockItemButton}"> <Grid> <Thumb x:Name="PART_Thumb" Background="{TemplateBinding Background}" Opacity="23" Style="{StaticResource MaterialDesignClockItemThumb}" /> <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content="{TemplateBinding Content}" IsHitTestVisible="False" /> </Grid> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="Width" Value="32" /> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light}" /> </Trigger> <Trigger Property="IsChecked" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary}" /> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Foreground}" /> </Trigger> </Style.Triggers> </Style> </Setter.Value> </Setter> <Setter Property="CornerRadius" Value="8" /> <Setter Property="FlowDirection" Value="LeftToRight" /> <Setter Property="IsHeaderVisible" Value="True" /> <Setter Property="LesserButtonStyle"> <Setter.Value> <Style TargetType="{x:Type wpf:ClockItemButton}"> <Setter Property="Background" Value="Transparent" /> <Setter Property="Canvas.ZIndex" Value="1" /> <Setter Property="Height" Value="12" /> <Setter Property="HorizontalContentAlignment" Value="Center" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type wpf:ClockItemButton}"> <Grid> <Thumb x:Name="PART_Thumb" Background="{TemplateBinding Background}" Opacity=".52" Style="{StaticResource MaterialDesignClockItemThumb}" ToolTip="{TemplateBinding Content}" /> <Ellipse Width="6" Height="6" HorizontalAlignment="Center" VerticalAlignment="Center" Fill="{TemplateBinding Background}" IsHitTestVisible="False" /> </Grid> </ControlTemplate> </Setter.Value> </Setter> <Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="Width" Value="12" /> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary.Light}" /> </Trigger> <Trigger Property="IsChecked" Value="True"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary}" /> </Trigger> </Style.Triggers> </Style> </Setter.Value> </Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type wpf:Clock}"> <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="DisplayModeStates"> <VisualStateGroup.Transitions> <VisualTransition From="*" To="Hours"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1.2" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1.2" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=".85"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=".85"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> <VisualTransition From="Hours" To="Minutes"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> <VisualTransition From="Minutes" To="Seconds"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> <VisualTransition From="Hours" To="Seconds"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1.2"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0.85" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> <VisualTransition From="Seconds" To="Minutes"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseIn" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=".85"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=".85"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity"> <DiscreteDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1.2" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY"> <DiscreteDoubleKeyFrame KeyTime="0" Value="1.2" /> <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"> <EasingDoubleKeyFrame.EasingFunction> <SineEase EasingMode="EaseOut" /> </EasingDoubleKeyFrame.EasingFunction> </EasingDoubleKeyFrame> </DoubleAnimationUsingKeyFrames> </Storyboard> </VisualTransition> </VisualStateGroup.Transitions> <VisualState x:Name="Hours"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY" To="1" Duration="0" /> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX" To=".85" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY" To=".85" Duration="0" /> <DoubleAnimation Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX" To=".85" Duration="0" /> <DoubleAnimation Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY" To=".85" Duration="0" /> </Storyboard> </VisualState> <VisualState x:Name="Minutes"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX" To="1.2" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY" To="1.2" Duration="0" /> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY" To="1" Duration="0" /> </Storyboard> </VisualState> <VisualState x:Name="Seconds"> <Storyboard> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_HoursCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleX" To="1.2" Duration="0" /> <DoubleAnimation Storyboard.TargetName="HoursScaleTransform" Storyboard.TargetProperty="ScaleY" To="1.2" Duration="0" /> <DoubleAnimation Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleX" To="1.2" Duration="0" /> <DoubleAnimation Storyboard.TargetName="MinutesScaleTransform" Storyboard.TargetProperty="ScaleY" To="1.2" Duration="0" /> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_MinutesCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="False" /> </BooleanAnimationUsingKeyFrames> <BooleanAnimationUsingKeyFrames Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="IsHitTestVisible"> <DiscreteBooleanKeyFrame KeyTime="0" Value="True" /> </BooleanAnimationUsingKeyFrames> <DoubleAnimation Storyboard.TargetName="PART_SecondsCanvas" Storyboard.TargetProperty="Opacity" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleX" To="1" Duration="0" /> <DoubleAnimation Storyboard.TargetName="SecondsScaleTransform" Storyboard.TargetProperty="ScaleY" To="1" Duration="0" /> </Storyboard> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> <Grid Margin="24" VerticalAlignment="Center"> <Grid.ColumnDefinitions> <ColumnDefinition Width="auto" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <!--#region Time Display--> <Border Margin="0,0,52,0" VerticalAlignment="Center" Visibility="{TemplateBinding IsHeaderVisible, Converter={x:Static converters:BooleanToVisibilityConverter.CollapsedInstance}}"> <StackPanel> <StackPanel x:Name="TimeReadoutStackPanel" HorizontalAlignment="Right" VerticalAlignment="Center" Orientation="Horizontal"> <StackPanel.Resources> <Style x:Key="TimeTextBlock" TargetType="{x:Type TextBlock}"> <Setter Property="FontSize" Value="48" /> <Setter Property="FontWeight" Value="Normal" /> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Primary.Foreground}" /> </Style> </StackPanel.Resources> <Grid x:Name="PART_HourReadOut" Width="96" Height="80"> <Border x:Name="PART_HourReadOutBorder" CornerRadius="{TemplateBinding CornerRadius}"> <Border.Style> <Style TargetType="Border"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Hours}"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary}" /> </DataTrigger> </Style.Triggers> </Style> </Border.Style> </Border> <TextBlock x:Name="PART_HourReadOutText" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0:%h}}"> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TimeTextBlock}"> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Hours}"> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Foreground}" /> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> </Grid> <TextBlock Margin="-6,0,-6,0" VerticalAlignment="Center" Foreground="{DynamicResource MaterialDesign.Brush.Primary.Dark.Foreground}" Style="{StaticResource TimeTextBlock}" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0: : }}" /> <Grid x:Name="PART_MinuteReadOut" Width="96" Height="80"> <Border x:Name="PART_MinuteReadOutBorder" CornerRadius="{TemplateBinding CornerRadius}"> <Border.Style> <Style TargetType="Border"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Minutes}"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary}" /> </DataTrigger> </Style.Triggers> </Style> </Border.Style> </Border> <TextBlock x:Name="PART_MinuteReadOutText" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0:mm}}"> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TimeTextBlock}"> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Minutes}"> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Foreground}" /> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> </Grid> <TextBlock x:Name="PART_SecondColonPrefix" Margin="-6,0,-6,0" VerticalAlignment="Center" Foreground="{DynamicResource MaterialDesign.Brush.Primary.Dark.Foreground}" Style="{StaticResource TimeTextBlock}" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0: : }}" /> <Grid x:Name="PART_SecondReadOut" Width="96" Height="80"> <Border x:Name="PART_SecondReadOutBorder" CornerRadius="{TemplateBinding CornerRadius}"> <Border.Style> <Style TargetType="Border"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" /> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Seconds}"> <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Secondary}" /> </DataTrigger> </Style.Triggers> </Style> </Border.Style> </Border> <TextBlock x:Name="PART_SecondReadOutText" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0:ss}}"> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TimeTextBlock}"> <Style.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMode}" Value="{x:Static wpf:ClockDisplayMode.Seconds}"> <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Secondary.Foreground}" /> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> </Grid> </StackPanel> <Border x:Name="AmPmBorder" Margin="0,12,0,0" HorizontalAlignment="Stretch" CornerRadius="{TemplateBinding CornerRadius}"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Grid.Clip> <MultiBinding Converter="{x:Static converters:BorderClipConverter.Instance}"> <Binding ElementName="AmPmBorder" Path="ActualWidth" /> <Binding ElementName="AmPmBorder" Path="ActualHeight" /> <Binding ElementName="AmPmBorder" Path="CornerRadius" /> <Binding ElementName="AmPmBorder" Path="BorderThickness" /> </MultiBinding> </Grid.Clip> <RadioButton x:Name="AMRadioButton" Height="40" Content="AM" IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsPostMeridiem, Converter={x:Static converters:NotConverter.Instance}}" Style="{StaticResource MaterialDesignCalendarMeridiemRadioButtonThemed}" /> <RadioButton x:Name="PMRadioButton" Grid.Column="1" Height="40" Content="PM" IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsPostMeridiem}" Style="{StaticResource MaterialDesignCalendarMeridiemRadioButtonThemed}" /> </Grid> </Border> </StackPanel> </Border> <!--#endregion--> <!--#region Clock circle--> <Grid Grid.Column="1" VerticalAlignment="Top"> <Ellipse x:Name="BackgroundEllipse" Width="230" Height="230" Fill="{DynamicResource MaterialDesign.Brush.Primary}" /> <Canvas x:Name="PART_HoursCanvas" Width="230" Height="230" RenderTransformOrigin=".5,.5"> <Path x:Name="HourLine" Canvas.Left="113.625" Canvas.Top="19.047" Width="3" Height="96.959" Data="M2.25,95.515 C2.25,96.036356 1.8582492,96.459 1.375,96.459 C0.89175084,96.459 0.5,96.036356 0.5,95.515 C0.5,94.993643 0.89175084,94.571 1.375,94.571 C1.8582492,94.571 2.25,94.993643 2.25,95.515 z M1.375,95.469003 L1.375,0.50000001" Fill="{DynamicResource MaterialDesign.Brush.Secondary}" RenderTransformOrigin="0.5,0.985" Stretch="Fill" Stroke="{DynamicResource MaterialDesign.Brush.Secondary}"> <Path.RenderTransform> <RotateTransform Angle="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Converter={x:Static converters:ClockLineConverter.HoursInstance}}" /> </Path.RenderTransform> </Path> <Canvas.RenderTransform> <ScaleTransform x:Name="HoursScaleTransform" ScaleX="1" ScaleY="1" /> </Canvas.RenderTransform> </Canvas> <Canvas x:Name="PART_MinutesCanvas" Width="230" Height="230" IsHitTestVisible="False" Opacity="0" RenderTransformOrigin=".5,.5"> <Path x:Name="MinuteLine" Canvas.Left="113.625" Canvas.Top="19.047" Width="3" Height="96.959" Data="M2.25,95.515 C2.25,96.036356 1.8582492,96.459 1.375,96.459 C0.89175084,96.459 0.5,96.036356 0.5,95.515 C0.5,94.993643 0.89175084,94.571 1.375,94.571 C1.8582492,94.571 2.25,94.993643 2.25,95.515 z M1.375,95.469003 L1.375,0.50000001" Fill="{DynamicResource MaterialDesign.Brush.Secondary}" RenderTransformOrigin="0.5,0.985" Stretch="Fill" Stroke="{DynamicResource MaterialDesign.Brush.Secondary}"> <Path.RenderTransform> <RotateTransform Angle="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Converter={x:Static converters:ClockLineConverter.MinutesInstance}}" /> </Path.RenderTransform> </Path> <Canvas.RenderTransform> <ScaleTransform x:Name="MinutesScaleTransform" ScaleX="1" ScaleY="1" /> </Canvas.RenderTransform> </Canvas> <Canvas x:Name="PART_SecondsCanvas" Width="230" Height="230" IsHitTestVisible="False" Opacity="0" RenderTransformOrigin=".5,.5"> <Path x:Name="SecondLine" Canvas.Left="113.625" Canvas.Top="19.047" Width="3" Height="96.959" Data="M2.25,95.515 C2.25,96.036356 1.8582492,96.459 1.375,96.459 C0.89175084,96.459 0.5,96.036356 0.5,95.515 C0.5,94.993643 0.89175084,94.571 1.375,94.571 C1.8582492,94.571 2.25,94.993643 2.25,95.515 z M1.375,95.469003 L1.375,0.50000001" Fill="{DynamicResource MaterialDesign.Brush.Secondary}" RenderTransformOrigin="0.5,0.985" Stretch="Fill" Stroke="{DynamicResource MaterialDesign.Brush.Secondary}"> <Path.RenderTransform> <RotateTransform Angle="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Converter={x:Static converters:ClockLineConverter.SecondsInstance}}" /> </Path.RenderTransform> </Path> <Canvas.RenderTransform> <ScaleTransform x:Name="SecondsScaleTransform" ScaleX="1" ScaleY="1" /> </Canvas.RenderTransform> </Canvas> </Grid> <!--#endregion--> </Grid> </Border> <ControlTemplate.Triggers> <Trigger Property="Is24Hours" Value="True"> <Setter TargetName="AmPmBorder" Property="Visibility" Value="Collapsed" /> <Setter TargetName="PART_HourReadOutText" Property="Text" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Time, Mode=OneWay, StringFormat={}{0:HH}}" /> </Trigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="Is24Hours" Value="True" /> <Condition Property="IsPostMeridiem" Value="False" /> <Condition Property="IsMidnightHour" Value="False" /> </MultiTrigger.Conditions> <Setter TargetName="HourLine" Property="Canvas.Top" Value="40" /> <Setter TargetName="HourLine" Property="Height" Value="76" /> </MultiTrigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="Is24Hours" Value="True" /> <Condition Property="IsMiddayHour" Value="True" /> </MultiTrigger.Conditions> <Setter TargetName="HourLine" Property="Canvas.Top" Value="40" /> <Setter TargetName="HourLine" Property="Height" Value="76" /> </MultiTrigger> <Trigger Property="DisplayAutomation" Value="{x:Static wpf:ClockDisplayAutomation.None}"> <Setter TargetName="PART_SecondColonPrefix" Property="Visibility" Value="Collapsed" /> <Setter TargetName="PART_SecondReadOut" Property="Visibility" Value="Collapsed" /> </Trigger> <Trigger Property="DisplayAutomation" Value="{x:Static wpf:ClockDisplayAutomation.Cycle}"> <Setter TargetName="PART_SecondColonPrefix" Property="Visibility" Value="Collapsed" /> <Setter TargetName="PART_SecondReadOut" Property="Visibility" Value="Collapsed" /> </Trigger> <Trigger Property="DisplayAutomation" Value="{x:Static wpf:ClockDisplayAutomation.ToMinutesOnly}"> <Setter TargetName="PART_SecondColonPrefix" Property="Visibility" Value="Collapsed" /> <Setter TargetName="PART_SecondReadOut" Property="Visibility" Value="Collapsed" /> </Trigger> <Trigger Property="DisplayAutomation" Value="{x:Static wpf:ClockDisplayAutomation.ToSeconds}"> <Setter TargetName="PART_SecondColonPrefix" Property="Visibility" Value="Visible" /> <Setter TargetName="PART_SecondReadOut" Property="Visibility" Value="Visible" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </ResourceDictionary> |