如何使卡片淡入淡出C#/ WPF / MaterialDesign

时间:2019-12-05 02:09:40

标签: c# wpf xaml

单击按钮后,我希望卡片淡入,然后在设置的时间后淡出。不幸的是,我是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%,所以任何帮助。

1 个答案:

答案 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_BeginTimehttps://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);
}

这是一种方法,但是有更好的方法。我目前无法想到它们,但我知道它们存在。