【问题标题】:Custom Flat Progress Bar自定义平面进度条
【发布时间】:2013-06-26 19:12:58
【问题描述】:

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

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

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

我可以在 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>

【问题讨论】:

  • 那么似乎是什么问题?您已经有一个模板。

标签: wpf xaml progress-bar


【解决方案1】:

我认为您应该从阅读 ProgressBar Styles and Templates 开始。 ProgressBar 有一些命名部分,例如 PART_IndicatorPART_Track。它们按名称标识,以便在正确的地方使用。它还有 2 个 CommonStates: Determinate 用于当您想要显示实际进度时,Indeterminate 用于当您想要显示进度时。您不必担心覆盖。如果您正确命名模板的某些部分,它将自动为您完成。

【讨论】:

  • 感谢您指向该链接,我已经用我尝试过的代码和结果更新了我的问题。虽然它完全不存在,但你知道我做错了什么吗?
  • 两端的渐变看起来很褪色,这是导致视觉状态的原因吗?
  • 在您的模板中将PART_GlowRect Rectagle 替换为Border,将Fill 替换为Background 并将其设置为您想要的蓝色。应该有帮助
猜你喜欢
  • 2012-06-26
  • 1970-01-01
  • 2014-01-29
  • 2016-05-06
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多