以编程方式和WPF故事板动画混合更改属性

时间:2015-01-17 22:13:29

标签: c# wpf animation storyboard

我需要制作相对简单的WPF应用程序。

让故事板在按下按钮时动画按钮,以便它们淡出。动画逐渐降低不透明度并设置隐藏的可见性。而且效果很好。

问题是我想再次显示该按钮,但是以编程方式显示。好吧它不起作用,动画改变的属性变得模仿我的代码所做的更改。我还需要以编程方式隐藏按钮。

所以我试着制作淡入淡出的动画并按照程序调用它:

Storyboard fadein = ((Storyboard)FindResource("fadein"));
fadein.Begin(btnFlag);

我也是以编程方式调用fadeout。

现在我有不同的问题:

第一次以编程方式调用fadeout时,它会以某种方式阻止按下按钮时再次触发淡出。

我该怎么办? 谢谢。

我很抱歉,如果这是一个愚蠢的问题,我只需要制作这个WPF应用程序而我没有经验。

编辑: 我已经尝试改变FillBehavior,但它没有帮助。

编辑: 我发现这很奇怪。我设置     btnFlag.Opacity = 1; 然后在那条线之后立即移动我有这条线:

Console.WriteLine(btnFlag.Opacity);

并打印0.1,这是动画设置的值。

编辑:

这是我的fadein和fadeout故事板:

<Storyboard x:Key="fadein">
            <DoubleAnimation BeginTime="0:0:0.0" Storyboard.TargetProperty="Opacity" From="0.1" To="1.0" Duration="0:0:0.1"/>
            <ObjectAnimationUsingKeyFrames BeginTime="0:0:0.0" Storyboard.TargetProperty="Visibility">
                <DiscreteObjectKeyFrame KeyTime="0">
                    <DiscreteObjectKeyFrame.Value>
                        <Visibility>Visible</Visibility>
                    </DiscreteObjectKeyFrame.Value>
                </DiscreteObjectKeyFrame>
            </ObjectAnimationUsingKeyFrames>
        </Storyboard>
        <Storyboard x:Key="fadeout">
            <DoubleAnimation BeginTime="0:0:0.25" Storyboard.TargetProperty="Opacity" From="1.0" To="0.1" Duration="0:0:0.5"/>
            <ObjectAnimationUsingKeyFrames BeginTime="0:0:0.75" Storyboard.TargetProperty="Visibility">
                <DiscreteObjectKeyFrame KeyTime="0">
                    <DiscreteObjectKeyFrame.Value>
                        <Visibility>Hidden</Visibility>
                    </DiscreteObjectKeyFrame.Value>
                </DiscreteObjectKeyFrame>
            </ObjectAnimationUsingKeyFrames>
        </Storyboard>

我有一个Style,所有按钮都会引用我想要的外观和感觉。这是该Style的代码片段:

                <BeginStoryboard Storyboard="{StaticResource fadeout}"/>
            </Trigger.EnterActions>

这一切都很好,但是第一次以编程方式启动动画时它会以常规方式停止工作。 如果我想修改以前通过动画修改的代码中的属性,则忽略所有修改。

1 个答案:

答案 0 :(得分:0)

似乎我太累了,昨天找不到这个。 这似乎可以解释一切,我还不确定使用什么方法。

How to: Set a Property After Animating It with a Storyboard

嗯,我希望这会对某人有所帮助。

不幸的是,它无法帮助我,因为我的故事板是从样式的Style和Button引用中引用的。所以似乎没有办法获取Storyboard对象并从中删除Button。 并且button.BeginAnimations(Button.OpacityProperty,null)在这种情况下也没有帮助。 如果我找到解决方案,我会发布它。但就目前而言,似乎没有解决方案。