河南郑州网站设计公司,北京品牌建设网站公司,青岛手机建站公司,有人找做网站的元旦元旦团团圆圆、WPF开发者在此真诚的祝愿开发者们在新的一年里心想事成、万事如意!WPF开发者QQ群#xff1a; 340500857由于微信群人数太多入群请添加小编微信号yanjinhuawechat 或 W_Feng_aiQ 邀请入群需备注WPF开发者 PS#xff1a;有更好的方式欢迎推荐。01—代码如下一… 元旦元旦团团圆圆、WPF开发者在此真诚的祝愿开发者们在新的一年里心想事成、万事如意!WPF开发者QQ群 340500857 由于微信群人数太多入群请添加小编微信号 yanjinhuawechat 或 W_Feng_aiQ 邀请入群 需备注WPF开发者 PS有更好的方式欢迎推荐。01—代码如下一、创建 CountdownTimer.xaml 继承ContentControl代码如下。using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Effects;namespace WPFDevelopers.Controls
{public enum CountdownTimerEffect{Default,MultiColor}public class CountdownTimer : ContentControl{private Storyboard storyboard;private const double seconds 800;private double currentSeconds seconds;private Grid myGrid;public int Number{get { return (int)GetValue(NumberProperty); }set { SetValue(NumberProperty, value); }}public static readonly DependencyProperty NumberProperty DependencyProperty.Register(Number, typeof(int), typeof(CountdownTimer), new PropertyMetadata(3));/// summary/// 完成后回到开始/// /summarypublic bool IsFinishStart{get { return (bool)GetValue(IsFinishStartProperty); }set { SetValue(IsFinishStartProperty, value); }}public static readonly DependencyProperty IsFinishStartProperty DependencyProperty.Register(IsFinishStart, typeof(bool), typeof(CountdownTimer), new PropertyMetadata(false));public CountdownTimerEffect CountdownTimerEffect{get { return (CountdownTimerEffect)GetValue(CountdownTimerEffectProperty); }set { SetValue(CountdownTimerEffectProperty, value); }}public static readonly DependencyProperty CountdownTimerEffectProperty DependencyProperty.Register(ExhibitionEnum, typeof(CountdownTimerEffect), typeof(CountdownTimer), new PropertyMetadata(CountdownTimerEffect.Default));public override void OnApplyTemplate(){base.OnApplyTemplate();NameScope.SetNameScope(this, new NameScope());if (FontSize SystemFonts.CaptionFontSize)FontSize 200;FontFamily DrawingContextHelper.FontFamily;storyboard new Storyboard();myGrid new Grid();myGrid.Name myGrid;myGrid.ToolTip MouseDown;myGrid.Background new SolidColorBrush(Colors.White);var linearGradient new LinearGradientBrush{GradientStops new GradientStopCollection{new GradientStop{ Color Colors.Red, Offset 1 },new GradientStop{ Color Colors.White, Offset 1 },new GradientStop{ Color Colors.White, Offset .5 },new GradientStop{ Color Colors.Red, Offset .5 },new GradientStop{ Color Colors.Red, Offset 0 },new GradientStop{ Color Colors.White, Offset 0 },},StartPoint new Point(0.5, 0),EndPoint new Point(10, 10),SpreadMethod GradientSpreadMethod.Reflect,MappingMode BrushMappingMode.Absolute};SolidColorBrush solidColor;this.RegisterName(myGrid.Name, myGrid);var num 0;for (int i Number; i num; i--){var textBlock new TextBlock();switch (CountdownTimerEffect){case CountdownTimerEffect.Default:if (i % 2 0)solidColor Brushes.White;elsesolidColor Brushes.Black;textBlock.Foreground solidColor;break;case CountdownTimerEffect.MultiColor:textBlock.Foreground linearGradient;break;}textBlock.Text i.ToString();textBlock.Name $textBlock{i};textBlock.FontSize FontSize;textBlock.FontWeight FontWeights.ExtraBold;textBlock.VerticalAlignment VerticalAlignment.Center;textBlock.HorizontalAlignment HorizontalAlignment.Center;textBlock.RenderTransformOrigin new Point(.5, .5);textBlock.Effect new DropShadowEffect{ShadowDepth 2,RenderingBias RenderingBias.Performance,Color Colors.Red};if (!i.Equals(Number))textBlock.Opacity 0;textBlock.RenderTransform new ScaleTransform{ScaleX 2,ScaleY 2,};this.RegisterName(textBlock.Name, textBlock);TimeSpan beginTime TimeSpan.Zero;if (storyboard.Children.Count 0){beginTime TimeSpan.FromMilliseconds(currentSeconds);currentSeconds seconds;}var cubicEase new CubicEase{EasingMode EasingMode.EaseIn,};DoubleAnimation doubleAnimationScaleX new DoubleAnimation();doubleAnimationScaleX.From 2;doubleAnimationScaleX.To 0;doubleAnimationScaleX.EasingFunction cubicEase;Storyboard.SetTargetName(doubleAnimationScaleX, textBlock.Name);Storyboard.SetTargetProperty(doubleAnimationScaleX, new PropertyPath((TextBlock.RenderTransform).(ScaleTransform.ScaleX)));var doubleAnimationScaleY new DoubleAnimation{From 2,To 0,EasingFunction cubicEase};Storyboard.SetTargetName(doubleAnimationScaleY, textBlock.Name);Storyboard.SetTargetProperty(doubleAnimationScaleY, new PropertyPath((TextBlock.RenderTransform).(ScaleTransform.ScaleY)));doubleAnimationScaleX.BeginTime beginTime;doubleAnimationScaleY.BeginTime beginTime;doubleAnimationScaleX.Duration TimeSpan.FromMilliseconds(seconds);doubleAnimationScaleY.Duration TimeSpan.FromMilliseconds(seconds);if (!i.Equals(Number)){var doubleAnimationOpacity new DoubleAnimation{Duration TimeSpan.FromMilliseconds(0),BeginTime beginTime,From 0,To 1};Storyboard.SetTargetName(doubleAnimationOpacity, textBlock.Name);Storyboard.SetTargetProperty(doubleAnimationOpacity, new PropertyPath(TextBlock.OpacityProperty));storyboard.Children.Add(doubleAnimationOpacity);}if (i % 2 0){var colorAnimation new ColorAnimation{Duration TimeSpan.FromMilliseconds(0),From Colors.White,BeginTime beginTime,To Colors.Black};Storyboard.SetTargetName(colorAnimation, myGrid.Name);Storyboard.SetTargetProperty(colorAnimation, new PropertyPath((Panel.Background).(SolidColorBrush.Color)));storyboard.Children.Add(colorAnimation);}else{if (!i.Equals(Number)){var colorAnimation new ColorAnimation{Duration TimeSpan.FromMilliseconds(0),BeginTime beginTime,From Colors.Black,To Colors.White};Storyboard.SetTargetName(colorAnimation, myGrid.Name);Storyboard.SetTargetProperty(colorAnimation, new PropertyPath((Panel.Background).(SolidColorBrush.Color)));storyboard.Children.Add(colorAnimation);}}storyboard.Children.Add(doubleAnimationScaleX);storyboard.Children.Add(doubleAnimationScaleY);myGrid.Children.Add(textBlock);}this.Content myGrid;}protected override void OnMouseDown(MouseButtonEventArgs e){base.OnMouseDown(e);if (storyboard ! null storyboard.Children.Count 0){storyboard.Completed (s, y) {myGrid.Background new SolidColorBrush(Colors.White);if (IsFinishStart){var scaleTransform new ScaleTransform{ScaleX 2,ScaleY 2};var tb myGrid.Children.CastTextBlock().First();tb.RenderTransform scaleTransform;}};storyboard.Begin(this);}}}
}二、CountdownTimerExample.xaml 代码如下UserControl x:ClassWPFDevelopers.Samples.ExampleViews.CountdownTimerExamplexmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006 xmlns:dhttp://schemas.microsoft.com/expression/blend/2008 xmlns:localclr-namespace:WPFDevelopers.Samples.ExampleViewsxmlns:wpfdevhttps://github.com/yanjinhuagood/WPFDevelopersmc:Ignorabled d:DesignHeight450 d:DesignWidth800Grid Margin10 Grid.Row1Grid.RowDefinitionsRowDefinition HeightAuto/RowDefinition Height*//Grid.RowDefinitionsBorder Margin0,0,0,0 Background{StaticResource WhiteSolidColorBrush} CornerRadius4,4,0,0 Effect{StaticResource NormalShadowDepth}wpfdev:NavigateMenu TabStripPlacementTop SelectionChangedNavigateMenu_SelectionChangedListBoxItem ContentDefault/ListBoxItem ContentMultiColor//wpfdev:NavigateMenu/BorderBorder Grid.Row1 Background{StaticResource WhiteSolidColorBrush} CornerRadius0,0,4,4Effect{StaticResource NormalShadowDepth}Grid Margin10wpfdev:CountdownTimer Number3 x:NameCountdownTimer1/UniformGrid Columns4 VisibilityCollapsed x:NameCountdownTimerGroupwpfdev:CountdownTimer Number9 CountdownTimerEffectMultiColor FontSize150 IsFinishStartTrue/wpfdev:CountdownTimer Number5 CountdownTimerEffectMultiColor FontSize150 IsFinishStartTrue/wpfdev:CountdownTimer Number2 CountdownTimerEffectMultiColor FontSize150 IsFinishStartTrue/wpfdev:CountdownTimer Number7 CountdownTimerEffectMultiColor FontSize150 IsFinishStartTrue//UniformGrid/Grid/Border/Grid
/UserControl三、CountdownTimerExample.xaml.cs 代码如下using System.Windows;
using System.Windows.Controls;namespace WPFDevelopers.Samples.ExampleViews
{/// summary/// CountdownTimerExample.xaml 的交互逻辑/// /summarypublic partial class CountdownTimerExample : UserControl{public CountdownTimerExample(){InitializeComponent();}private void NavigateMenu_SelectionChanged(object sender, SelectionChangedEventArgs e){var item e.AddedItems[0] as ListBoxItem;if (item null) return;switch (item.Content.ToString()){case Default:if(CountdownTimer1.Visibility ! Visibility.Visible){CountdownTimer1.Visibility Visibility.Visible;CountdownTimerGroup.Visibility Visibility.Collapsed;}break;case MultiColor:if (CountdownTimerGroup.Visibility ! Visibility.Visible){CountdownTimerGroup.Visibility Visibility.Visible;CountdownTimer1.Visibility Visibility.Collapsed;}break;}}}
}02—效果预览鸣谢素材提供者 - 贺龙源码地址如下Githubhttps://github.com/WPFDevelopersOrgGiteehttps://gitee.com/WPFDevelopersOrgWPF开发者QQ群 340500857 Githubhttps://github.com/WPFDevelopersOrg出处https://www.cnblogs.com/yanjinhua版权本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。转载请著名作者 出处 https://github.com/WPFDevelopersOrg扫一扫关注我们更多知识早知道点击阅读原文可跳转至源代码