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

如何自定义WPF进度条的Indeterminate模式以实现持续动画的条纹进度条?

纯XAML实现持续动画条纹进度条

没问题,我帮你搞定这个和示例完全一致的持续动画条纹进度条!基于你已有的代码,我们只需要给条纹容器添加一个无限循环的平移动画,就能实现条纹持续滚动的效果。下面是完整的纯XAML解决方案:

<Window.Resources>
    <ControlTemplate x:Key="AnimatedStripedProgressBarTemplate" TargetType="{x:Type ProgressBar}">
        <Grid>
            <Border x:Name="PART_Track" CornerRadius="2" BorderThickness="1" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}"/>
            <Border x:Name="PART_Indicator" CornerRadius="2" BorderThickness="1" HorizontalAlignment="Left" Background="{TemplateBinding Foreground}" Margin="0,-1,0,1">
                <Grid ClipToBounds="True" x:Name="Animation">
                    <Border x:Name="PART_GlowRect" Width="150" HorizontalAlignment="Left" Background="Transparent">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="*" />
                            </Grid.ColumnDefinitions>
                            <Rectangle Grid.Column="0" Fill="Red" />
                            <Rectangle Grid.Column="1" Fill="Green" />
                            <Rectangle Grid.Column="2" Fill="Blue" />
                        </Grid>
                        <!-- 添加平移动画 -->
                        <Border.RenderTransform>
                            <TranslateTransform x:Name="StripTransform"/>
                        </Border.RenderTransform>
                        <Border.Triggers>
                            <EventTrigger RoutedEvent="Loaded">
                                <BeginStoryboard>
                                    <Storyboard>
                                        <!-- 平移距离等于条纹容器宽度,实现无缝循环 -->
                                        <DoubleAnimation 
                                            Storyboard.TargetName="StripTransform"
                                            Storyboard.TargetProperty="X"
                                            From="0" To="-150" 
                                            Duration="0:0:1" 
                                            RepeatBehavior="Forever"/>
                                    </Storyboard>
                                </BeginStoryboard>
                            </EventTrigger>
                        </Border.Triggers>
                    </Border>
                </Grid>
            </Border>
        </Grid>
    </ControlTemplate>
</Window.Resources>

<!-- 使用模板的ProgressBar -->
<ProgressBar Template="{StaticResource AnimatedStripedProgressBarTemplate}" 
             Value="75" Height="20" Width="300"
             BorderBrush="#ccc" Background="#eee"/>

关键说明:

  • 我们给PART_GlowRect添加了TranslateTransform,并通过DoubleAnimation让它的X轴从0平移到-150(刚好等于条纹容器的宽度),这样条纹滚动后能无缝衔接,形成循环效果。
  • 设置RepeatBehavior="Forever"让动画持续运行,不会停止。
  • 保留了你原有的三色条纹布局,同时完善了ProgressBar的基础模板(添加了PART_Track轨道部分,让进度条更符合WPF控件的标准结构)。

这个方案完全用纯XAML实现,不需要任何后台代码,运行后就能看到条纹持续滚动的动画效果,和示例的表现一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 13:32:27