如何自定义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
相关产品推荐
相关产品推荐

