public static Brush GetHoverRevealBrush(UIElement target)
        {
            RadialGradientBrush brush = new(Colors.White, Colors.Transparent)
            {
                MappingMode = BrushMappingMode.Absolute,
                Opacity     = 0.0,
                RadiusX     = DefaultRevealBackgroudBrushRadius,
                RadiusY     = DefaultRevealBackgroudBrushRadius
            };

            var binding = new MultiBinding
            {
                Converter = new RelativePositionConverter()
            };

            binding.Bindings.Add(new Binding()
            {
                Source = target, Path = new PropertyPath(RevealBrushHelper.RootObjectProperty)
            });
            binding.Bindings.Add(new Binding()
            {
                Source = target
            });
            binding.Bindings.Add(new Binding()
            {
                Source = target, Path = new PropertyPath(RevealBrushHelper.MousePositionProperty)
            });

            BindingOperations.SetBinding(brush, RadialGradientBrush.CenterProperty, binding);
            BindingOperations.SetBinding(brush, RadialGradientBrush.GradientOriginProperty, binding);

            RevealBrushHelper.SetRevealBrush(target, brush);

            return(brush);
        }
Exemplo n.º 2
0
        public static void UpdateBrush(UIElement uiElement)
        {
            RevealBrushState revealBrushState      = RevealBrushHelper.GetState(uiElement);
            bool             isMouseOverRootVisual = RevealBrushHelper.GetIsMouseOverRootVisual(uiElement);

            if (RevealBrushHelper.GetRevealBrush(uiElement) is Brush brush)
            {
                brush.Opacity = (isMouseOverRootVisual && revealBrushState == RevealBrushState.Normal) ? 1.0 : 0.0;
            }
        }
        public static Brush GetPressedRevealBrush(UIElement target)
        {
            var gradientStops = new GradientStopCollection(
                new[]
            {
                new GradientStop(Color.FromArgb(30, 255, 255, 255), 0),
                new GradientStop(Color.FromArgb(40, 255, 255, 255), 0),
                new GradientStop(Colors.Transparent, 1)
            });

            RadialGradientBrush brush = new(gradientStops)
            {
                MappingMode = BrushMappingMode.Absolute,
                Opacity     = 0.0,
                RadiusX     = 200.0,
                RadiusY     = 200.0
            };

            var binding = new MultiBinding
            {
                Converter = new RelativePositionConverter()
            };

            binding.Bindings.Add(new Binding()
            {
                Source = target, Path = new PropertyPath(RevealBrushHelper.RootObjectProperty)
            });
            binding.Bindings.Add(new Binding()
            {
                Source = target
            });
            binding.Bindings.Add(new Binding()
            {
                Source = target, Path = new PropertyPath(RevealBrushHelper.MousePositionProperty)
            });

            BindingOperations.SetBinding(brush, RadialGradientBrush.CenterProperty, binding);
            BindingOperations.SetBinding(brush, RadialGradientBrush.GradientOriginProperty, binding);

            RevealBrushHelper.SetRevealBrush(target, brush);

            return(brush);
        }
        public static void UpdateBrush(UIElement uiElement)
        {
            RevealBrushState revealBrushState = RevealBrushHelper.GetState(uiElement);
            RevealBrushMode  revealBrushMode  = RevealBrushHelper.GetRevealBrushMode(uiElement);

            if (RevealBrushHelper.GetRevealBrush(uiElement) is RadialGradientBrush brush)
            {
                if (revealBrushMode == RevealBrushMode.Background)
                {
                    brush.Opacity = (revealBrushState != RevealBrushState.Normal) ? 0.1 : 0.0;
                }
                else if (revealBrushMode == RevealBrushMode.BackgroundPressed)
                {
                    if (revealBrushState == RevealBrushState.Pressed)
                    {
                        var time           = TimeSpan.FromMilliseconds(1500);
                        var easingFunction = new CubicEase()
                        {
                            EasingMode = EasingMode.EaseOut
                        };

                        var opacityAnimation = new DoubleAnimation(1.0, 0.0, time)
                        {
                            EasingFunction = easingFunction
                        };

                        brush.BeginAnimation(Brush.OpacityProperty, opacityAnimation);

                        var radiusAnimation = new DoubleAnimation(50.0, 200.0, time)
                        {
                            EasingFunction = easingFunction
                        };

                        brush.BeginAnimation(RadialGradientBrush.RadiusXProperty, radiusAnimation);
                        brush.BeginAnimation(RadialGradientBrush.RadiusYProperty, radiusAnimation);

                        var gradientStop = brush.GradientStops[1];

                        var offsetAnimation = new DoubleAnimation(0, 0.8, time)
                        {
                            EasingFunction = easingFunction
                        };

                        gradientStop.BeginAnimation(GradientStop.OffsetProperty, offsetAnimation);
                    }
                    else
                    {
                        var time           = TimeSpan.FromMilliseconds(200);
                        var easingFunction = new CubicEase()
                        {
                            EasingMode = EasingMode.EaseOut
                        };

                        var opacityAnimation = new DoubleAnimation(0.0, time)
                        {
                            EasingFunction = easingFunction
                        };

                        brush.BeginAnimation(Brush.OpacityProperty, opacityAnimation);

                        var radiusAnimation = new DoubleAnimation(200.0, time)
                        {
                            EasingFunction = easingFunction
                        };

                        brush.BeginAnimation(RadialGradientBrush.RadiusXProperty, radiusAnimation);
                        brush.BeginAnimation(RadialGradientBrush.RadiusYProperty, radiusAnimation);
                    }
                }
            }
        }