1. 程式人生 > 其它 >[WPF] 修改進度條樣式實現斑馬進度條

[WPF] 修改進度條樣式實現斑馬進度條

屬性:

Foreground:進度條的顏色,帶動畫的模板不適用。

Background:背景色。

BorderBrush:邊框顏色。

BorderThickness:邊框大小。

pp:BorderElement.CornerRadius:附加屬性,圓角大小。

效果展示:

預設樣式模板:

<Style x:Key="PP.Styles.ProgressBar" TargetType="{x:Type ProgressBar}">
    <Setter Property="Foreground" Value="{DynamicResource PP.Brushes.Themes}
"/> <Setter Property="Background" Value="{DynamicResource PP.Brushes.Background}"/> <Setter Property="BorderBrush" Value="{DynamicResource PP.Brushes.Black20}"/> <Setter Property="BorderThickness" Value="1"/> <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.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="Animation"> <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.TargetProperty="(UIElement.RenderTransformOrigin)" Storyboard.TargetName="Animation"> <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 BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="{TemplateBinding attach:BorderElement.CornerRadius}" /> <Rectangle x:Name="PART_Track"/> <ctrls:CornerClip CornerRadius="{TemplateBinding attach:BorderElement.CornerRadius}"> <Grid x:Name="PART_Indicator" ClipToBounds="True" HorizontalAlignment="Left"> <Rectangle x:Name="Indicator" Fill="{TemplateBinding Foreground}"/> <Rectangle x:Name="Animation" Fill="{TemplateBinding Foreground}" RenderTransformOrigin="0.5,0.5"> <Rectangle.RenderTransform> <TransformGroup> <ScaleTransform/> <SkewTransform/> <RotateTransform/> <TranslateTransform/> </TransformGroup> </Rectangle.RenderTransform> </Rectangle> </Grid> </ctrls:CornerClip> </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>

帶動畫的樣式模板:

<Style x:Key="Page.Styles.ProgressBar" TargetType="{x:Type ProgressBar}" BasedOn="{StaticResource PP.Styles.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">
                                <Storyboard RepeatBehavior="Forever">
                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName="transX1" Storyboard.TargetProperty="X">
                                        <SplineDoubleKeyFrame KeyTime="0" Value="0" />
                                        <SplineDoubleKeyFrame KeyTime="00:00:.35" Value="20" />
                                    </DoubleAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Indeterminate">
                                <Storyboard RepeatBehavior="Forever">
                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName="transX2" Storyboard.TargetProperty="X">
                                        <SplineDoubleKeyFrame KeyTime="0" Value="0" />
                                        <SplineDoubleKeyFrame KeyTime="00:00:.35" Value="20" />
                                    </DoubleAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="{TemplateBinding pp:BorderElement.CornerRadius}" />
                    <Rectangle x:Name="PART_Track"/>
                    <pp:CornerClip CornerRadius="{TemplateBinding pp:BorderElement.CornerRadius}">
                        <pp:SimplePanel x:Name="PART_Indicator" ClipToBounds="True" HorizontalAlignment="Left">
                            <pp:SimplePanel.OpacityMask>
                                <LinearGradientBrush EndPoint="0 1">
                                    <GradientStop Offset="1" Color="#FF1359FA" />
                                    <GradientStop Offset="0.7" Color="#FF1359FA" />
                                    <GradientStop Offset="0" Color="#661359FA" />
                                </LinearGradientBrush>
                            </pp:SimplePanel.OpacityMask>
                            <Rectangle x:Name="DeterminateRoot">
                                <Rectangle.Fill>
                                    <LinearGradientBrush MappingMode="Absolute" SpreadMethod="Repeat" EndPoint="20 0">
                                        <LinearGradientBrush.Transform>
                                            <TransformGroup>
                                                <TranslateTransform x:Name="transX1" />
                                                <SkewTransform AngleX="-30" />
                                            </TransformGroup>
                                        </LinearGradientBrush.Transform>
                                        <GradientStop Offset="0" Color="#1359FA" />
                                        <GradientStop Offset="0.2" Color="#1359FA" />
                                        <GradientStop Offset="0.2" Color="#D41359FA" />
                                    </LinearGradientBrush>
                                </Rectangle.Fill>
                            </Rectangle>
                            <Rectangle x:Name="IndeterminateRoot" Visibility="Collapsed">
                                <Rectangle.Fill>
                                    <LinearGradientBrush MappingMode="Absolute" SpreadMethod="Repeat" EndPoint="20 0">
                                        <LinearGradientBrush.Transform>
                                            <TransformGroup>
                                                <TranslateTransform x:Name="transX2" />
                                                <SkewTransform AngleX="-30" />
                                            </TransformGroup>
                                        </LinearGradientBrush.Transform>
                                        <GradientStop Offset="0" Color="#1359FA" />
                                        <GradientStop Offset="0.2" Color="#1359FA" />
                                        <GradientStop Offset="0.2" Color="#D41359FA" />
                                    </LinearGradientBrush>
                                </Rectangle.Fill>
                            </Rectangle>
                        </pp:SimplePanel>
                    </pp:CornerClip>
                </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 TargetName="IndeterminateRoot" Property="Visibility" Value="Visible" />
                        <Setter TargetName="DeterminateRoot" Property="Visibility" Value="Collapsed" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

更多詳情,請檢視PP.WPF控制元件庫。