日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

WPF 实现圣诞树

發布時間:2023/12/4 asp.net 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WPF 实现圣诞树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:controls="clr-namespace:WPFDevelopers.Controls"><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="Basic/ControlBasic.xaml"/></ResourceDictionary.MergedDictionaries><Style TargetType="{x:Type controls:SnowCanvas}" BasedOn="{StaticResource ControlBasicStyle}"><Setter Property="Width" Value="672"/><Setter Property="Height" Value="376"/><Setter Property="Background" Value="#FFAD2B28"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type controls:SnowCanvas}"><Grid Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"Background="{TemplateBinding Background}"><Canvas x:Name="PART_Canvas" Height="246" Width="246"Background="#FF0C1935"><Canvas.Clip><EllipseGeometry Center="123,123" RadiusX="120" RadiusY="120"/></Canvas.Clip><Image Source="{TemplateBinding Icon}"Canvas.Left="25" Canvas.Top="30"/></Canvas></Grid></ControlTemplate></Setter.Value></Setter> </Style> <Style TargetType="{x:Type controls:Snowflake}" BasedOn="{StaticResource ControlBasicStyle}"><Setter Property="Template"><Setter.Value><ControlTemplate 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:Class="WPFDevelopers.Samples.ExampleViews.SnowCanvasExample"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:WPFDevelopers.Samples.ExampleViews"xmlns:wpfdev="https://github.com/yanjinhuagood/WPFDevelopers"mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"><Grid><wpfdev:SnowCanvas??Icon="pack://application:,,,/Images/Snow/SnowTree.png"/></Grid> </UserControl>

02


效果預覽

鳴謝素材提供者 - Alyssa Nicoll

源碼地址如下

github:https://github.com/yanjinhuagood/WPFDevelopers.git

gitee:https://gitee.com/yanjinhua/WPFDevelopers.git

WPF開發者QQ群:?340500857?

blogs:?https://www.cnblogs.com/yanjinhua

Github:https://github.com/yanjinhuagood

出處:https://www.cnblogs.com/yanjinhua

版權:本作品采用「署名-非商業性使用-相同方式共享 4.0 國際」許可協議進行許可。

轉載請著名作者 出處 https://github.com/yanjinhuagood

掃一掃關注我們,

更多知識早知道!

點擊閱讀原文可跳轉至源代碼

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的WPF 实现圣诞树的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。