Ejemplo n.º 1
0
        private static void OnCountPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            var element = sender as FrameworkElement;

            if (element == null)
            {
                return;
            }

            if (GetCount(element) >= 20)
            {
                var x = (0.6 * rand.NextDouble() + 0.2) * element.ActualWidth;
                var y = (0.6 * rand.NextDouble() + 0.2) * element.ActualHeight;
                PoppinStars.LetsPoppin(element, new Point(x, y));
            }
        }
Ejemplo n.º 2
0
            /// <summary>
            /// サブの星を生成します。
            /// </summary>
            /// <param name="canvas">親パネルを指定します。</param>
            /// <param name="leftTop">描画する左上点を指定します。</param>
            /// <param name="rand">描画するためのランダム要素を決定するための乱数ジェネレータを指定します。</param>
            /// <returns>生成した星を返します。</returns>
            private UIElement CreateSubStar(Canvas canvas, Point leftTop, Random rand)
            {
                var scaling  = 0.25;
                var time     = 200;
                var duration = new Duration(TimeSpan.FromMilliseconds(400));
                var size     = GetSize(this.AdornedElement);

                var scaleTransform = new ScaleTransform(scaling, scaling);
                var transforms     = new TransformGroup();

                transforms.Children.Add(scaleTransform);

                var brush = new SolidColorBrush(Color.FromRgb((byte)rand.Next(0x80, 0xff), (byte)rand.Next(0x80, 0xff), (byte)rand.Next(0x80, 0xff)));

                var star = new PoppinStars()
                {
                    Width  = size.Width,
                    Height = size.Height,
                    RenderTransformOrigin = new Point(0.5, 0.5),
                    RenderTransform       = transforms,
                    Fill   = brush,
                    Stroke = brush,
                };

                Canvas.SetLeft(star, leftTop.X);
                Canvas.SetTop(star, leftTop.Y);

                star.Loaded += (_, __) =>
                {
                    var nominal = star.ActualWidth / 2.0;
                    var r       = rand.Next(8, 13) / 10.0;
                    var angle   = rand.Next(0, 360);
                    var x       = r * nominal * Math.Cos(angle);
                    var y       = r * nominal * Math.Sin(angle);

                    var rotateTransform = new RotateTransform(angle);
                    transforms.Children.Add(rotateTransform);

                    var translateTransform = new TranslateTransform(-star.ActualWidth / 2.0, -star.ActualHeight / 2.0);
                    transforms.Children.Add(translateTransform);

                    var storyboard          = new Storyboard();
                    var xTranslateAnimation = new DoubleAnimation()
                    {
                        By       = x,
                        Duration = duration,
                    };
                    Storyboard.SetTarget(xTranslateAnimation, star);
                    Storyboard.SetTargetProperty(xTranslateAnimation, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[2].(TranslateTransform.X)"));
                    storyboard.Children.Add(xTranslateAnimation);

                    var yTranslateAnimation = new DoubleAnimation()
                    {
                        By       = y,
                        Duration = duration,
                    };
                    Storyboard.SetTarget(yTranslateAnimation, star);
                    Storyboard.SetTargetProperty(yTranslateAnimation, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[2].(TranslateTransform.Y)"));
                    storyboard.Children.Add(yTranslateAnimation);

                    if (rand.Next() % 3 == 0)
                    {
                        var rotateAnimation = new DoubleAnimation()
                        {
                            By       = 300,
                            Duration = duration,
                        };
                        Storyboard.SetTarget(rotateAnimation, star);
                        Storyboard.SetTargetProperty(rotateAnimation, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[1].(RotateTransform.Angle)"));
                        storyboard.Children.Add(rotateAnimation);
                    }

                    var xScaleAnimation = new DoubleAnimation()
                    {
                        To        = 0,
                        BeginTime = TimeSpan.FromMilliseconds(time),
                        Duration  = duration,
                    };
                    Storyboard.SetTarget(xScaleAnimation, star);
                    Storyboard.SetTargetProperty(xScaleAnimation, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"));
                    storyboard.Children.Add(xScaleAnimation);

                    var yScaleAnimation = new DoubleAnimation()
                    {
                        To        = 0,
                        BeginTime = TimeSpan.FromMilliseconds(time),
                        Duration  = duration,
                    };
                    Storyboard.SetTarget(yScaleAnimation, star);
                    Storyboard.SetTargetProperty(yScaleAnimation, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"));
                    storyboard.Children.Add(yScaleAnimation);

                    storyboard.Completed += (___, ____) =>
                    {
                        canvas.Children.Remove(star);
                        star = null;
                        RemoveAdorner(canvas);
                    };
                    storyboard.Begin();
                };

                return(star);
            }
Ejemplo n.º 3
0
            /// <summary>
            /// メインの星を生成します。
            /// </summary>
            /// <param name="canvas">親パネルを指定します。</param>
            /// <param name="leftTop">描画する左上点を指定します。</param>
            /// <returns>生成した星を返します。</returns>
            private UIElement CreateMainStar(Canvas canvas, Point leftTop)
            {
                var scaling  = 0.6;
                var time     = 200;
                var duration = new Duration(TimeSpan.FromMilliseconds(time));
                var size     = GetSize(this.AdornedElement);

                var scaleTransform = new ScaleTransform(scaling, scaling);
                var transforms     = new TransformGroup();

                transforms.Children.Add(scaleTransform);
                var star = new PoppinStars()
                {
                    Width   = size.Width,
                    Height  = size.Height,
                    Opacity = 0.0,
                    RenderTransformOrigin = new Point(0.5, 0.5),
                    RenderTransform       = transforms,
                    StrokeThickness       = 2.0,
                };

                Canvas.SetLeft(star, leftTop.X);
                Canvas.SetTop(star, leftTop.Y);

                star.Loaded += (_, __) =>
                {
                    var translateTransform = new TranslateTransform(-star.ActualWidth / 2.0, -star.ActualHeight / 2.0);
                    transforms.Children.Add(translateTransform);

                    var storyboard       = new Storyboard();
                    var opacityAnimation = new DoubleAnimation()
                    {
                        To       = 1.0,
                        Duration = duration,
                    };
                    Storyboard.SetTarget(opacityAnimation, star);
                    Storyboard.SetTargetProperty(opacityAnimation, new PropertyPath(PoppinStars.OpacityProperty));
                    storyboard.Children.Add(opacityAnimation);

                    var endOpacityAnimation = new DoubleAnimation()
                    {
                        To        = 0.0,
                        BeginTime = TimeSpan.FromMilliseconds(time),
                        Duration  = duration,
                    };
                    Storyboard.SetTarget(endOpacityAnimation, star);
                    Storyboard.SetTargetProperty(endOpacityAnimation, new PropertyPath(PoppinStars.OpacityProperty));
                    storyboard.Children.Add(endOpacityAnimation);

                    var xScaleAnimation = new DoubleAnimation()
                    {
                        To       = 1.0,
                        Duration = duration,
                    };
                    Storyboard.SetTarget(xScaleAnimation, star);
                    Storyboard.SetTargetProperty(xScaleAnimation, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"));
                    storyboard.Children.Add(xScaleAnimation);

                    var yScaleAnimation = new DoubleAnimation()
                    {
                        To       = 1.0,
                        Duration = duration,
                    };
                    Storyboard.SetTarget(yScaleAnimation, star);
                    Storyboard.SetTargetProperty(yScaleAnimation, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"));
                    storyboard.Children.Add(yScaleAnimation);

                    storyboard.Completed += (___, ____) =>
                    {
                        canvas.Children.Remove(star);
                        star = null;
                        RemoveAdorner(canvas);
                    };
                    storyboard.Begin();
                };

                return(star);
            }