You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DoubleAnimation异常触发?Toast通知动画延迟失效问题求助

解决Toast滑入滑出动画间3500ms延迟不生效的问题

你的问题出在Task.Delay(3500)没有等待完成就直接执行了滑出动画——Task.Delay是异步方法,不加await的话,代码会跳过延迟直接往下走,导致两个动画连续播放。下面给你三种可行的解决办法:

方法一:用async/await等待延迟完成

修改后台方法为异步,通过await等待延迟结束后再执行滑出动画:

async void ShowToast(string Header, string Content)
{
    ToastHeader.Text = Header;
    ToastContent.Text = Content;

    Storyboard ToastIN = (Storyboard)FindResource("ToastIN");
    ToastIN.Begin();

    await Task.Delay(3500);

    Storyboard ToastOUT = (Storyboard)FindResource("ToastOUT");
    ToastOUT.Begin();
}

方法二:监听滑入动画的Completed事件

如果场景不允许用async/await,可以监听滑入动画的完成事件,在事件里处理延迟和滑出:

void ShowToast(string Header, string Content)
{
    ToastHeader.Text = Header;
    ToastContent.Text = Content;

    Storyboard ToastIN = (Storyboard)FindResource("ToastIN");
    Storyboard ToastOUT = (Storyboard)FindResource("ToastOUT");

    ToastIN.Completed += (sender, args) =>
    {
        Task.Delay(3500).ContinueWith(_ =>
        {
            // 必须在UI线程执行动画,所以用Dispatcher调用
            Dispatcher.Invoke(() => ToastOUT.Begin());
        });
    };

    ToastIN.Begin();
}

方法三:合并动画到一个Storyboard(推荐)

直接在XAML里把滑入、延迟、滑出整合成一个完整的Storyboard,不需要后台处理逻辑,更符合WPF动画的设计方式:

<Window.Resources>
    <Storyboard x:Key="ToastFullAnimation">
        <!-- 滑入动画:1秒完成 -->
        <DoubleAnimation From="501" To="0" Duration="0:0:1" 
                         Storyboard.TargetName="Toast" 
                         Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)" />
        <!-- 滑出动画:滑入完成后延迟3.5秒(总共4.5秒后)开始执行 -->
        <DoubleAnimation BeginTime="0:0:4.5" From="0" To="501" Duration="0:0:1" 
                         Storyboard.TargetName="Toast" 
                         Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)" />
    </Storyboard>
</Window.Resources>

后台代码简化为:

void ShowToast(string Header, string Content)
{
    ToastHeader.Text = Header;
    ToastContent.Text = Content;

    Storyboard ToastFull = (Storyboard)FindResource("ToastFullAnimation");
    ToastFull.Begin();
}

内容的提问来源于stack exchange,提问作者user14656140

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 00:27:55