我正在为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
动画?
提前致谢
万岁
答案 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
目录。