尝试将ProgressBar XAML模板放在一起时IsIndeterminate出现问题

时间:2010-01-12 14:05:34

标签: .net wpf xaml animation progress-bar

我正在为WPF ProgressBar创建一个XAML模板。如果IsIndeterminate设置为False,则以下XAML代码可以正常工作:

<ControlTemplate x:Key="DefaultProgressBarTemplate" TargetType="{x:Type ProgressBar}">
    <ControlTemplate.Resources>
        <SolidColorBrush x:Key="SolidBorderBrush" Color="#767676" />
        <LinearGradientBrush x:Key="IndicatorBrush" StartPoint="0,0" EndPoint="1,0">
            <LinearGradientBrush.GradientStops>
                <GradientStop Color="#BCCF64" Offset="0.5" />
                <GradientStop Color="#E1FF77" Offset="0.0" />
            </LinearGradientBrush.GradientStops>
        </LinearGradientBrush>
    </ControlTemplate.Resources>
    <Grid MinHeight="14">
        <Border Name="PART_Track" CornerRadius="9" Background="Transparent" BorderBrush="{StaticResource SolidBorderBrush}" BorderThickness="1" SnapsToDevicePixels="True" />
        <Border Name="PART_Indicator" CornerRadius="9" Background="{StaticResource IndicatorBrush}" BorderBrush="{StaticResource SolidBorderBrush}" BorderThickness="1" HorizontalAlignment="Left" SnapsToDevicePixels="True" />
    </Grid>
</ControlTemplate>

<Style x:Key="{x:Type ProgressBar}" TargetType="{x:Type ProgressBar}">
    <Setter Property="OverridesDefaultStyle" Value="True" />
    <Setter Property="Template" Value="{StaticResource DefaultProgressBarTemplate}" />
</Style>

指标边框从最小到最大填满ProgressBar。但是,如果我将IsIndeterminate设置为True,则指示符边框将填满整个ProgressBar(就像设置为最大值)并且根本不会生成任何动画。我没有尝试过改变ProgressBar的这种行为。 我需要做些什么来制作类似于标准WPF IsIndeterminate中的动画的ProgressBar动画?

提前致谢

万岁

1 个答案:

答案 0 :(得分:2)

ProgressBar旨在显示IsIndeterminate="true"时的整个指标。 WPF的内置ProgressBar样式实际上会在IsIndeterminate="true"时使用动画画笔替换指示符颜色,从而产生您正在观察的效果。你也可以这样做。只需在IsIndeterminate="true"上使用属性触发器,并将画笔设置为您正在设置动画颜色的画笔。如果你想要一个不同的效果,另一种选择是创建一个由IsIndeterminate="true"触发的单独动画。

您可以使用NET Reflector工具及其BamlViewer加载项来查看内置样式。安装Expression Blend时,原始源文件也会复制到硬盘上,甚至是评估版本,因此安装Expression Blend是另一种查看内置样式的XAML的方法。只需查看C:\Program Files\Microsoft Expression\Blend 2\SystemThemes目录。