Изменить:
В этой статье на codeproject.com есть рабочая версия индикатора выполнения "barber pole". Поиск статьи "CandyCaneProgressPainter".
Предыдущий ответ:
Этот делает почти то, что вы хотите. Все, что вам нужно сделать, чтобы сделать его тем, что вы хотите, это ограничить видимость прямоугольника до требуемого процента и изменить соотношение высоты и ширины.
Ключевыми словами, которые вы хотите, являются "раскадровка", "анимация" и "триггер"
Вот xaml из ссылки с некоторыми комментариями из ссылки о том, как сделать анимацию плавной:
<Rectangle x:Name="pole" Width="100" Height="20" Stroke="Black" StrokeThickness="1">
<Rectangle.Fill>
<DrawingBrush TileMode="Tile" Stretch="None" Viewbox="0,0,1,1" Viewport="0,0,25,25" ViewportUnits="Absolute">
<DrawingBrush.RelativeTransform>
<TranslateTransform X="0" Y="0" />
</DrawingBrush.RelativeTransform>
<DrawingBrush.Drawing>
<GeometryDrawing Brush="Red" Geometry="M10,0 25,0 15,25 0,25 Z" /> </DrawingBrush.Drawing>
</DrawingBrush>
</Rectangle.Fill>
<Rectangle.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="(Rectangle.Fill).(DrawingBrush.RelativeTransform).(TranslateTransform.X)" From="0" To=".25" RepeatBehavior="Forever" Duration="0:0:1" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Rectangle.Triggers>
</Rectangle>
Я думаю, что дергание происходит, если вы удаляете значение "width", но если значение возвращается, оно работает гладко. Weird.
Да, действительно, в сущности, потребовалось несколько корректировок с умножением числа на правила, ширина в этом случае анимация может быть .1 или .05, если, например, у вас ширина 5000 ... теперь это работает здорово!