在后面的代码中在WPF中创建一个Blink动画

Vah*_*hid 4 c# wpf animation blink

我想将Blink动画应用于一个动画,Canvas以便我在其上绘制的所有对象都会闪烁.

我使用下面的代码有点成功,它改变了相当快的Opacity属性Canvas来实现这个效果,但我有点不满意.

我希望FadeOut/FadeIn在我当前的代码中没有任何纯闪烁.我怎么能以正确的方式做到这一点?

var blinkAnimation = new DoubleAnimation
{
    From = 1,
    To = 0
};

var blinkStoryboard = new Storyboard
{
    Duration = TimeSpan.FromMilliseconds(500),
    RepeatBehavior = RepeatBehavior.Forever,
    AutoReverse = true
};

Storyboard.SetTarget(blinkAnimation, MyCanvas);
Storyboard.SetTargetProperty(blinkAnimation, new PropertyPath(OpacityProperty));

blinkStoryboard.Children.Add(blinkAnimation);
MyCanvas.BeginStoryboard(blinkStoryboard);
Run Code Online (Sandbox Code Playgroud)

也许我可以使用VisibilityProperty它来做到这一点,但我无法做到这一点.

Cle*_*ens 7

您可以使用适当的第二个动画BeginTime:

var switchOffAnimation = new DoubleAnimation
{
    To = 0,
    Duration = TimeSpan.Zero
};

var switchOnAnimation = new DoubleAnimation
{
    To = 1,
    Duration = TimeSpan.Zero,
    BeginTime = TimeSpan.FromSeconds(0.5)
};

var blinkStoryboard = new Storyboard
{
    Duration = TimeSpan.FromSeconds(1),
    RepeatBehavior = RepeatBehavior.Forever
};

Storyboard.SetTarget(switchOffAnimation, MyCanvas);
Storyboard.SetTargetProperty(switchOffAnimation, new PropertyPath(Canvas.OpacityProperty));
blinkStoryboard.Children.Add(switchOffAnimation);

Storyboard.SetTarget(switchOnAnimation, MyCanvas);
Storyboard.SetTargetProperty(switchOnAnimation, new PropertyPath(Canvas.OpacityProperty));
blinkStoryboard.Children.Add(switchOnAnimation);

MyCanvas.BeginStoryboard(blinkStoryboard);
Run Code Online (Sandbox Code Playgroud)