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

如何在RepeatBehavior(2)执行完成后调用隐藏新闻的函数?

嘿,我来帮你搞定这个需求!要实现右到左滚动新闻、重复2次后自动隐藏,用DoubleAnimation完全没问题,我把完整的实现拆成XAML布局和C#动画逻辑两部分,每一步都给你讲清楚:

1. XAML布局部分

首先我们需要一个能方便控制元素位置的容器,这里用Canvas最合适,因为它支持绝对定位。新闻文本用TextBlock,初始位置放在Canvas的右侧外面,这样滚动开始时是从屏幕外进来的:

<Window x:Class="ScrollNewsDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="滚动新闻演示" Height="300" Width="800">
    <Canvas x:Name="NewsCanvas" Background="#F5F5F5" Margin="20">
        <!-- 滚动新闻文本,初始位置在Canvas右侧外部 -->
        <TextBlock x:Name="ScrollNewsText" 
                   Text="这是一条需要右到左滚动的新闻内容,重复2次后会自动隐藏~"
                   FontSize="18" Foreground="#333"
                   Canvas.Top="20"
                   Canvas.Left="{Binding ElementName=NewsCanvas, Path=ActualWidth}"/>
    </Canvas>
</Window>
2. C#动画逻辑部分

接下来在后台代码里创建DoubleAnimation,设置滚动参数、重复次数,并且监听动画完成事件来隐藏新闻:

using System;
using System.Windows;
using System.Windows.Media.Animation;

namespace ScrollNewsDemo
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            // 窗口加载完成后启动动画
            Loaded += MainWindow_Loaded;
        }

        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            StartScrollAnimation();
        }

        private void StartScrollAnimation()
        {
            // 确保控件尺寸已计算完成,避免动画参数错误
            ScrollNewsText.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
            var textWidth = ScrollNewsText.DesiredSize.Width;
            var canvasWidth = NewsCanvas.ActualWidth;

            // 创建水平位移动画:从Canvas右侧(canvasWidth)滚到左侧外面(-textWidth)
            var scrollAnimation = new DoubleAnimation
            {
                From = canvasWidth,
                To = -textWidth,
                Duration = TimeSpan.FromSeconds(8), // 单次滚动时长,可根据需求调整
                RepeatBehavior = new RepeatBehavior(2) // 重复2次滚动
            };

            // 动画完成(2次滚动结束后)触发隐藏操作
            scrollAnimation.Completed += (s, args) =>
            {
                ScrollNewsText.Visibility = Visibility.Collapsed;
                // 如果需要重置位置以便后续再次使用,可以加上下面这句
                // Canvas.SetLeft(ScrollNewsText, canvasWidth);
            };

            // 启动TextBlock的Canvas.Left属性动画
            ScrollNewsText.BeginAnimation(Canvas.LeftProperty, scrollAnimation);
        }
    }
}
关键细节说明
  • 动画参数:From设为Canvas的宽度(文本初始在右侧外),To设为负的文本宽度(确保整个文本完全滚出左侧),Duration控制滚动速度,数值越小滚动越快。
  • 重复行为:RepeatBehavior = new RepeatBehavior(2)明确指定动画重复2次,完成后触发Completed事件。
  • 隐藏逻辑:在Completed事件回调里直接设置Visibility = Visibility.Collapsed,这样新闻就会从界面消失;如果之后需要再次展示,记得重置文本的位置并重新启动动画。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:53:57