wpf — неожиданное поведение с тематическим индикатором выполнения

#c# #wpf #xaml #themes #wpf-controls

Вопрос:

У меня есть неопределенный индикатор выполнения, который мне нужно было закруглить, чтобы он соответствовал другим элементам моего пользовательского интерфейса. Да, я знаю, что на эту тему есть еще темы, я пишу вопрос после прочтения и использования их. Я использовал конструктор visual studio для создания копии шаблона, чтобы я мог его изменить, потому что индикатор выполнения как таковой не имеет свойства радиуса угла.

Мне удалось обойти углы аниматора и дорожки, границы и почти все остальное, что я могу найти с этими свойствами в стиле. По какой-то причине он выглядит закругленным, но когда анимация достигает сторон, она переполняется и заканчивается как квадрат — > Вот что происходит:

Мое главное окно-код очень прост: <ProgressBar Height="20" IsIndeterminate="True"/> так что проблемы здесь нет…

Код моего стиля индикатора выполнения таков:

 <Style TargetType="ProgressBar" x:Key="{x:Type ProgressBar}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ProgressBar}">
                    <Grid x:Name="TemplateRoot">
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualState x:Name="Determinate"/>
                                <VisualState x:Name="Indeterminate">
                                    <Storyboard RepeatBehavior="Forever">
                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="Animation" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
                                            <EasingDoubleKeyFrame KeyTime="0" Value="0.25"/>
                                            <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0.25"/>
                                            <EasingDoubleKeyFrame KeyTime="0:0:2" Value="0.25"/>
                                        </DoubleAnimationUsingKeyFrames>
                                        <PointAnimationUsingKeyFrames Storyboard.TargetName="Animation" Storyboard.TargetProperty="(UIElement.RenderTransformOrigin)">
                                            <EasingPointKeyFrame KeyTime="0" Value="-0.5,0.5"/>
                                            <EasingPointKeyFrame KeyTime="0:0:1" Value="0.5,0.5"/>
                                            <EasingPointKeyFrame KeyTime="0:0:2" Value="1.5,0.5"/>
                                        </PointAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                        <Border Background="{TemplateBinding Background}" CornerRadius="20" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}"/>
                        <Rectangle x:Name="PART_Track" RadiusX="20" RadiusY="20"/>
                        <Grid x:Name="PART_Indicator" ClipToBounds="true" HorizontalAlignment="Left">
                            <Rectangle x:Name="Indicator" Fill="{TemplateBinding Foreground}" RadiusX="20" RadiusY="20"/>
                            <Rectangle x:Name="Animation" Fill="{TemplateBinding Foreground}" RadiusX="20" RadiusY="20" ClipToBounds="True" RenderTransformOrigin="0.5,0.5">
                                <Rectangle.RenderTransform>
                                    <TransformGroup>
                                        <ScaleTransform/>
                                        <SkewTransform/>
                                        <RotateTransform/>
                                        <TranslateTransform/>
                                    </TransformGroup>
                                </Rectangle.RenderTransform>
                            </Rectangle>
                        </Grid>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="Orientation" Value="Vertical">
                            <Setter Property="LayoutTransform" TargetName="TemplateRoot">
                                <Setter.Value>
                                    <RotateTransform Angle="-90"/>
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                        <Trigger Property="IsIndeterminate" Value="true">
                            <Setter Property="Visibility" TargetName="Indicator" Value="Collapsed"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
 

Если кто-нибудь сможет определить проблему и помочь мне, я был бы очень признателен!

P.S. Извините, если у меня есть какие-либо ошибки в написании или проблемы с грамматикой, английский не мой родной язык…