单击按钮后,我希望卡片淡入,然后在设置的时间后淡出。不幸的是,我是C#/ WPF的新手,并且不知道该怎么做。目前,我也在使用MaterialDeisgn和Dragablz。
我尝试了this解决方案,但这只是导致程序崩溃。有人可以帮助我吗?由于我完全不确定该在哪里使用,因此我为自己要淡入/淡出的Card附加了XAML(它会通过单击其他按钮来触发)。
为清晰起见:我正在尝试使其开始隐藏,并且当MainWindow.xaml.cs中的if语句为true时,淡入淡出,过一段时间(也许是一秒钟?)淡出,然后保持隐藏状态,直到再次触发。
<materialDesign:Card
x:Name="userFound"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Background="{DynamicResource PrimaryHueMidBrush}"
Foreground="{DynamicResource PrimaryHueDarkForegroundBrush}"
Width="81"
Padding="8"
materialDesign:ShadowAssist.ShadowDepth="Depth2"
UniformCornerRadius="6" Margin="-60,0,0,249">
<TextBlock
TextWrapping="Wrap">
User Found!
</TextBlock>
</materialDesign:Card>
非常感谢您的帮助!我迷路了100%,所以任何帮助。
答案 0 :(得分:0)
这是从https://docs.microsoft.com/en-us/dotnet/api/system.windows.media.animation.timeline.begintime?view=netframework-4.8#System_Windows_Media_Animation_Timeline_BeginTime和https://docs.microsoft.com/en-us/dotnet/framework/wpf/graphics-multimedia/how-to-animate-the-opacity-of-an-element-or-brush修改的
<Button>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation BeginTime="0:0:0.0" Storyboard.TargetName="userFound" Storyboard.TargetProperty="(Card.Opacity)" From="0" To="1" Duration="0:0:0.5"/> //Fade in taking half a second
<DoubleAnimation BeginTime="0:0:1.5" Storyboard.TargetName="userFound" Storyboard.TargetProperty="(Card.Opacity)" From="1" To="0" Duration="0:0:0.5"/>//Fade out takes half a second
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
<Button>
以上内容会使您的卡片在1/2秒内完全不透明,然后在卡片完全不透明后等待1秒钟,然后逐渐消失,这意味着所有动画在2秒钟内完成
删除按钮触发器,然后将情节提要添加到页面资源中,然后添加x:key,以便可以从后面的代码中调用它
<Page.Resources>
<Storyboard x:Key="Test">
<DoubleAnimation BeginTime="0:0:0.0" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:0.5"/> //Fade in taking half a second
<DoubleAnimation BeginTime="0:0:1.5" Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:0.5"/> //Fade out takes half a second
</Storyboard>
</Page.Resources>
然后就像他们在WPF Fade Out on a control上所做的那样或在点击事件中执行类似的操作
if(truecondition)
{
((Storyboard)this.Resources["Test"]).Begin(userFound);
}
这是一种方法,但是有更好的方法。我目前无法想到它们,但我知道它们存在。