3

我正在尝试创建一个类似于下图的进度条,它处于不确定的效果中,所以它只是一个反复循环的动画。

在此处输入图像描述

我遇到的问题是我从哪里开始?

我对此的主要逻辑是我需要将一个矩形覆盖在另一个矩形之上,然后应用某种动画来使顶部矩形移动,然后循环同样的东西。

我可以在 Blend 的情节提要中做到这一点,但我认为这不是实现这一目标的最佳方式。

谁能指出我正确的方向?

编辑:

工作 XAML:

    <Style x:Key="{x:Type ProgressBar}"
       TargetType="{x:Type ProgressBar}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type ProgressBar}">
        <Grid MinHeight="14"
              MinWidth="200"
              Background="#FFF0F0F0">
          <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="CommonStates">
              <VisualState x:Name="Determinate" />
              <VisualState x:Name="Indeterminate">
                <Storyboard>
                  <ObjectAnimationUsingKeyFrames Duration="00:00:00"
                                                 Storyboard.TargetName="PART_Indicator"
                                                 Storyboard.TargetProperty="Background">
                    <DiscreteObjectKeyFrame KeyTime="00:00:00">
                      <DiscreteObjectKeyFrame.Value>
                        <SolidColorBrush>#FFF0F0F0</SolidColorBrush>
                      </DiscreteObjectKeyFrame.Value>
                    </DiscreteObjectKeyFrame>
                  </ObjectAnimationUsingKeyFrames>

                </Storyboard>
              </VisualState>
            </VisualStateGroup>
          </VisualStateManager.VisualStateGroups>
          <Border x:Name="PART_Track"
                  CornerRadius="0"
                  BorderThickness="1">
            <Border.BorderBrush>
              <SolidColorBrush Color="#FFF0F0F0" />
            </Border.BorderBrush>
          </Border>
          <Border x:Name="PART_Indicator"
                  CornerRadius="0"
                  BorderThickness="0"
                  HorizontalAlignment="Left"
                  Background="#FF4B8BC2"
                  Margin="0,-1,0,1">
            <Border.BorderBrush>
              <SolidColorBrush Color="#FFD7D7D7" />

            </Border.BorderBrush>
            <Grid ClipToBounds="True"
                  x:Name="Animation">
              <Border x:Name="PART_GlowRect"
                         Width="100"
                         HorizontalAlignment="Left"
                         Background="#FF4B8BC2"
                         Margin="-100,0,0,0" />
            </Grid>
          </Border>
        </Grid>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
  <Setter Property="Background">
    <Setter.Value>
      <SolidColorBrush Color="#FFF0F0F0" />
    </Setter.Value>
  </Setter>
  <Setter Property="Foreground">
    <Setter.Value>
      <SolidColorBrush Color="#FF4B8BC2" />
    </Setter.Value>
  </Setter>
</Style>
4

1 回答 1

1

我认为你应该从阅读ProgressBar Styles and Templates开始。ProgressBar有一些命名部分,如PART_Indicatoror PART_Track。它们按名称标识,以便在正确的地方使用。它也有 2 CommonStatesDeterminate当你想显示真正的进步Indeterminate时,当你想显示进步时。您不必担心覆盖。如果您正确命名模板的某些部分,它将自动为您完成。

于 2013-06-26T19:20:52.737 回答