A simple snow effect
MainWindow:
1. The main interface generates snowflakes for the grid via DispatcherTimer
2. Snowflakes fall behind and say snowflakes removed from the grid container
Public Partial classMainWindow { PublicMainWindow () {InitializeComponent (); Closing+ = (s, e) = =Viewmodellocator.cleanup (); Loaded+=mainwindow_loaded; } Private voidMainwindow_loaded (Objectsender, RoutedEventArgs e) { varTimer =NewDispatcherTimer {Interval= Timespan.frommilliseconds ( -) }; Timer. Tick+=Timer_tick; Timer. Start (); } //Add Snowflakes Private voidTimer_tick (Objectsender, EventArgs e) {LayoutRoot.Children.Add (Createsnowflower ()); } //Generate Snowflakes Private Staticsnowflower Createsnowflower () {varSnowflower =NewSnowflower (); Snowflower.complete+ = args = { //Remove snowflakes from the parent container varFlower = args asSnowflower; if(Flower = =NULL)return; varParent =visualtreehelper.getparent (flower); varPanel = Parent asPanel; if(Panel! =NULL&&panel. Children.contains (flower)) {panel. Children.remove (flower); } }; returnSnowflower; } }
Snowflower
1. Falling animation of snowflakes and rotating animation
2. Increase the animation completion event
3. Random starting point
4. Random rotation speed and drop speed
/// <summary> ///Snowflakes/// </summary> Public classSnowflower:image {#regionField//full random number generator Private ReadOnlyRandom _random =Randomhelper.getrandom (); #endregion #regionProperty/// <summary> ///Drop Speed/// </summary> Public intGravityspeed {Get{return_random. Next (5,Ten); } } /// <summary> ///rotational speed/// </summary> Public intAnglespeed {Get{return_random. Next (1,5); } } /// <summary> ///The x-coordinate of the start/// </summary> Public intStartX {Get { return_random. Next (0, (int) systemparameters.primaryscreenwidth); } } #endregion PublicSnowflower () {Opacity=getopacity (); Source=GetSource (); Height=GetSize (); Width=Height; Rendertransformorigin=NewPoint (0.5,0.5); Margin=NewThickness (StartX,0,0,0); HorizontalAlignment=HorizontalAlignment.Left; VerticalAlignment=Verticalalignment.top; RenderTransform=Getrendertransform (); Loaded+=snowflower_loaded; } #regionAnimationPrivate voidSnowflower_loaded (Objectsender, RoutedEventArgs e) {Getfallingstoryborad (). Begin (); } //get information about a transformation Private StaticTransformGroup getrendertransform () {varresult =NewTransformGroup (); Result. Children.add (NewRotateTransform ()); Result. Children.add (NewTranslateTransform ()); returnresult; } //get the Falling animated story version PrivateStoryboard Getfallingstoryborad () {varresult =NewStoryboard (); //Add rotate Animationresult. Children.add (Getangleanimation ()); //Add drop Animation varFallinganimation =getfallinganimation (); Result. Duration=fallinganimation.duration; //triggers the completion event when the drop is completeresult.completed + = (sender, args) =Raisecomplete (); Result. Children.add (fallinganimation); returnresult; } //attribute Chain Private ReadOnly Object[] _propertychain ={rendertransformproperty, Transformgroup.childrenproperty, ROTATETRANSF Orm. Angleproperty, Translatetransform.yproperty}; //Get rotation animation PrivateDoubleAnimation getangleanimation () {varDa =NewDoubleAnimation { from=0, to= the, Duration=timespan.fromseconds (anglespeed), RepeatBehavior=Repeatbehavior.forever}; //Storyboard.settargetproperty (DA, New PropertyPath ("(Uielement.rendertransform)." ( TransformGroup.Children) [0]. (Rotatetransform.angle) "));Storyboard.settargetproperty (DA,NewPropertyPath ("(0). (1) [0]. (2)", _propertychain)); Storyboard.settarget (DA, This); returnda; } //get the Falling animation PrivateDoubleAnimation getfallinganimation () {varDa =NewDoubleAnimation { from=0, to=Systemparameters.primaryscreenheight, Duration=timespan.fromseconds (Gravityspeed)}; Storyboard.settargetproperty (DA,NewPropertyPath ("(Uielement.rendertransform). (TransformGroup.Children) [1]. (TRANSLATETRANSFORM.Y)")); Storyboard.settarget (DA, This); returnda; } #endregion //get the initial transparency Private Static Doublegetopacity () {varresult = (Double)NewRandom (). Next (1,5); Result= result/Ten; returnresult; } //Get Image source Private StaticBitmapImage GetSource () {varresult =NewBitmapImage (); Result. BeginInit (); Result. UriSource=NewUri ("/snoweffect;component/resource/snowflower.png", Urikind.relativeorabsolute); Result. EndInit (); returnresult; } //Get Dimensions Private Static DoubleGetSize () {varresult = (Double)NewRandom (). Next ( -, -); returnresult; } #regionCompletion events/// <summary> ///Finish Processing Delegate/// </summary> /// <param name= "Sender" ></param> Public Delegate voidCompletehandler (Objectsender); /// <summary> ///Completion Events/// </summary> Public EventCompletehandler complete; /// <summary> ///actions when event triggering is complete/// </summary> protected Virtual voidOnComplete () {if(Complete! =NULL) {Complete ( This); } } /// <summary> ///Raise Completion Event/// </summary> Public voidRaisecomplete () {oncomplete (); } #endregion }
Source
Desktop Snow Effect