WPF实现窗体抖动效果

实现窗体抖动效果仿QQ窗体抖动

  • 窗体抖动使用DoubleAnimation修改窗体的当前Left+15,并设置AutoReverse=True该值指示时间线在完成向前迭代后是否按相反的顺序播放
  • RepeatBehavior默认值为  Count 1,表示时间线播放一次。.
  • FillBehavior 属性设置 Stop. 由于其填充期中的动画继续重写其目标属性的值,因此尝试通过其他方式设置目标属性的值似乎不起作用;

1)WindowShake.cs 代码如下;

 public static void WindowShake(Window window = null)
        {
            if (window == null)
                if (Application.Current.Windows.Count > 0)
                    window = Application.Current.Windows.OfType<Window>().FirstOrDefault(o => o.IsActive);
            
            var doubleAnimation = new DoubleAnimation
            {
                From = window.Left,
                To = window.Left + 15,
                Duration = TimeSpan.FromMilliseconds(50),
                AutoReverse = true,
                RepeatBehavior = new RepeatBehavior(3),
                FillBehavior = FillBehavior.Stop
            };
            window.BeginAnimation(Window.LeftProperty, doubleAnimation);
            var wavUri = new Uri(@"pack://application:,,,/WPFDevelopers;component/Resources/Audio/shake.wav");
            var streamResource = Application.GetResourceStream(wavUri);
            var player1 = new SoundPlayer(streamResource.Stream);
            player1.Play();
        }

2)Shake 使用代码如下;

  • 方式一:不传Window参的话,获取当前程序运行存在焦点的Window
 ControlsHelper.WindowShake();
  • 方式二:可以传递需要抖动的Window
 ControlsHelper.WindowShake(window);