我需要制作相对简单的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>
这一切都很好,但是第一次以编程方式启动动画时它会以常规方式停止工作。 如果我想修改以前通过动画修改的代码中的属性,则忽略所有修改。
答案 0 :(得分:0)
似乎我太累了,昨天找不到这个。 这似乎可以解释一切,我还不确定使用什么方法。
How to: Set a Property After Animating It with a Storyboard
嗯,我希望这会对某人有所帮助。
不幸的是,它无法帮助我,因为我的故事板是从样式的Style和Button引用中引用的。所以似乎没有办法获取Storyboard对象并从中删除Button。 并且button.BeginAnimations(Button.OpacityProperty,null)在这种情况下也没有帮助。 如果我找到解决方案,我会发布它。但就目前而言,似乎没有解决方案。