潮阳网站开发,建材网站建设 南宁,商标名称注册查询官网,上海传媒公司总裁结婚WPF开发者QQ群#xff1a; 340500857 | 微信群 - 进入公众号主页 加入组织由于微信群人数太多入群请添加小编微信号#xff08;yanjinhuawechat#xff09;或#xff08;W_Feng_aiQ#xff09;邀请入群#xff08;需备注WPF开发者#xff09;PS#xff1a;有更好的… WPF开发者QQ群 340500857 | 微信群 - 进入公众号主页 加入组织 由于微信群人数太多入群请添加小编微信号yanjinhuawechat或W_Feng_aiQ邀请入群需备注WPF开发者 PS有更好的方式欢迎推荐。01—代码如下一、创建 SnowCanvas.cs 继承 Control代码如下。using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Threading;namespace WPFDevelopers.Controls
{[TemplatePart(Name CanvasTemplateName, Type typeof(Canvas))]public class SnowCanvas: Control{private const string CanvasTemplateName PART_Canvas;private Canvas _canvas;private readonly Random _random new Random((int)DateTime.Now.Ticks);public ImageSource Icon{get { return (ImageSource)GetValue(IconProperty); }set { SetValue(IconProperty, value); }}public static readonly DependencyProperty IconProperty DependencyProperty.Register(Icon, typeof(ImageSource), typeof(SnowCanvas), new PropertyMetadata(null));static SnowCanvas(){DefaultStyleKeyProperty.OverrideMetadata(typeof(SnowCanvas), new FrameworkPropertyMetadata(typeof(SnowCanvas)));}public override void OnApplyTemplate(){base.OnApplyTemplate();_canvas GetTemplateChild(CanvasTemplateName) as Canvas;if (_canvas null) return;this.Loaded (s, e) {var timer new DispatcherTimer { Interval TimeSpan.FromMilliseconds(300) };timer.Tick (s1, arg) AddSnowflake();timer.Start();};}protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e){base.OnMouseLeftButtonDown(e);}private void AddSnowflake(){var x _random.Next(0, (int)_canvas.ActualWidth);var y -10;var size _random.Next(4, 12);var translateTransform new TranslateTransform(x, y);var snowflake new Snowflake{RenderTransform new TransformGroup{Children new TransformCollection { translateTransform }},HorizontalAlignment HorizontalAlignment.Left,VerticalAlignment VerticalAlignment.Top,Width size,Height size};_canvas.Children.Add(snowflake);y (int)(_canvas.ActualHeight 10);DoubleAnimation animation new DoubleAnimation{To y,Duration TimeSpan.FromSeconds(_random.Next(3, 8))};Storyboard.SetTarget(animation, snowflake);Storyboard.SetTargetProperty(animation, new PropertyPath(RenderTransform.Children[0].Y));Storyboard story new Storyboard();story.Completed (sender, e) _canvas.Children.Remove(snowflake);story.Children.Add(animation);snowflake.Loaded (sender, args) story.Begin();}}
}二、Snowflake.xaml 代码如下using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;namespace WPFDevelopers.Controls
{public class Snowflake: Control{static Snowflake(){DefaultStyleKeyProperty.OverrideMetadata(typeof(Snowflake), new FrameworkPropertyMetadata(typeof(Snowflake)));}public Snowflake(){CacheMode new BitmapCache();}public override void OnApplyTemplate(){base.OnApplyTemplate();}}
}三、SnowCanvas.xaml代码如下ResourceDictionary xmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:controlsclr-namespace:WPFDevelopers.ControlsResourceDictionary.MergedDictionariesResourceDictionary SourceBasic/ControlBasic.xaml//ResourceDictionary.MergedDictionariesStyle TargetType{x:Type controls:SnowCanvas} BasedOn{StaticResource ControlBasicStyle}Setter PropertyWidth Value672/Setter PropertyHeight Value376/Setter PropertyBackground Value#FFAD2B28/Setter PropertyTemplateSetter.ValueControlTemplate TargetType{x:Type controls:SnowCanvas}Grid Width{TemplateBinding Width} Height{TemplateBinding Height}Background{TemplateBinding Background}Canvas x:NamePART_Canvas Height246 Width246Background#FF0C1935Canvas.ClipEllipseGeometry Center123,123 RadiusX120 RadiusY120//Canvas.ClipImage Source{TemplateBinding Icon}Canvas.Left25 Canvas.Top30//Canvas/Grid/ControlTemplate/Setter.Value/Setter
/Style
Style TargetType{x:Type controls:Snowflake} BasedOn{StaticResource ControlBasicStyle}Setter PropertyTemplateSetter.ValueControlTemplate TargetType{x:Type controls:Snowflake}Ellipse Fill{StaticResource WhiteSolidColorBrush}Width{TemplateBinding Width}Height{TemplateBinding Height}//ControlTemplate/Setter.Value/Setter
/Style
/ResourceDictionary四、SnowCanvasExample.xaml代码如下UserControl x:ClassWPFDevelopers.Samples.ExampleViews.SnowCanvasExamplexmlnshttp://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:DesignWidth800Gridwpfdev:SnowCanvas Iconpack://application:,,,/Images/Snow/SnowTree.png//Grid
/UserControl02—效果预览鸣谢素材提供者 - Alyssa Nicoll源码地址如下githubhttps://github.com/yanjinhuagood/WPFDevelopers.gitgiteehttps://gitee.com/yanjinhua/WPFDevelopers.gitWPF开发者QQ群 340500857 blogs https://www.cnblogs.com/yanjinhuaGithubhttps://github.com/yanjinhuagood出处https://www.cnblogs.com/yanjinhua版权本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。转载请著名作者 出处 https://github.com/yanjinhuagood扫一扫关注我们更多知识早知道点击阅读原文可跳转至源代码