#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. Извините, если у меня есть какие-либо ошибки в написании или проблемы с грамматикой, английский не мой родной язык…