【问题标题】:ProgressBar Background Property not working in Windows Store AppsProgressBar 背景属性在 Windows 应用商店应用程序中不起作用
【发布时间】:2014-10-14 18:21:37
【问题描述】:

我在我的应用程序中添加了ProgressBar,我希望它具有透明背景,所以我这样做了:

<ProgressBar IsIndeterminate="True" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
    <ProgressBar.Background>
        <SolidColorBrush Color="Black" Opacity="0.5" />
    </ProgressBar.Background>
</ProgressBar>

在预览窗口中一切看起来都很好,但是,当我运行我的应用程序时,Background 根本不存在。我找到的解决方案是将ProgressBar 放在网格中并在Grid 中设置Background 属性,但是由于预览显示正确,并且属性在那里,它不应该工作吗?
更新:

根据@Chris W. 的建议,我尝试覆盖ProgressBar 元素的默认样式,如下所示:

<ProgressBar IsIndeterminate="True" Background="#FF000000" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="50">
    <ProgressBar.Style>
        <Style TargetType="ProgressBar">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ProgressBar">
                        <Grid>
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="CommonStates">
                                    <VisualState x:Name="Indeterminate">
                                        <Storyboard RepeatBehavior="Forever">
                                            <DoubleAnimation Storyboard.TargetName="DeterminateRoot"
                                                 Storyboard.TargetProperty="Opacity"
                                                 To="0.5"
                                                 Duration="0" />
                                        </Storyboard>
                                    </VisualState>
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ProgressBar.Style>
</ProgressBar>

但仍然没有果汁。

【问题讨论】:

  • ProgressBar 可能有某种样式(可能是 VisualState),它会更改背景而不会在设计器中正确显示。您可以尝试编辑样式或从 MSDN 获取默认样式。

标签: xaml windows-store-apps progress-bar windows-8.1 windows-phone-8.1


【解决方案1】:

需要摆脱两 (2) 个 StoryBoard 动画

文档大纲>右键进度条>编辑模板->编辑副本

<!--
<FadeOutThemeAnimation Storyboard.TargetName="DeterminateRoot"/>
<DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="DeterminateRoot"/>
-->

正如@ricochete 建议的那样,如果使用 Opacity = 1,将 DeterminateRoot 的 Z-Order 更改为 EllipseGrid 的顶部

<Border x:Name="DeterminateRoot" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" MinHeight="{TemplateBinding MinHeight}">
    <Rectangle x:Name="ProgressBarIndicator" Fill="{TemplateBinding Foreground}" HorizontalAlignment="Left" Margin="{TemplateBinding Padding}"/>
</Border>
<Grid x:Name="EllipseGrid" Opacity="0">
<!-- ... more XAML Style -->

<Grid Background="#FFFF0000">
    <ProgressBar IsIndeterminate="True" Style="{StaticResource ProgressBarStyle1}" Height="50" >
        <ProgressBar.Background>
            <SolidColorBrush Color="Black" Opacity="0.5"/>
        </ProgressBar.Background>
    </ProgressBar>
</Grid>

【讨论】:

  • +1 只是为了比我更仔细地观察并看到另一个,这就是我在缺乏注意力的情况下轻松解决这些问题的结果。
  • 虽然这可行,但背景位于加载动画的顶部,即,如果我将不透明度设置为 1,我将看不到加载动画。 Border 元素DeterminateRoot 必须放在EllipseGrid 元素之前,因此不会发生重叠。请将此添加到您的答案中,以便我将其标记为正确的。
【解决方案2】:

如果您查看default template,您会在模板底部看到Backgroundx:Name="DeterminateRoot" 的一个位置只有一个TemplateBinding,所以这是您看到颜色的唯一位置从 Background 属性中设置。

然后,如果您爬上未定状态的情节提要,您会发现;

<DoubleAnimation Storyboard.TargetName="DeterminateRoot"
                 Storyboard.TargetProperty="Opacity"
                 To="0"
                 Duration="0" />

...您已将 ProgressBar 设置为 IsIndeterminate="True",因此您正在将接受 Background 属性的位置显式设置为零不透明度。

因此,您可以将该动画从情节提要中拉出该状态,或者放入您自己的新对象来设置您的东西,或者只是通过将其放入 Border 或 @987654328 来执行您提到的解决方法@ 或其他东西并以这种方式进行。

您也可以尝试(一旦您从情节提要解决了您的不透明度设置问题)只需将您的 SolidColorBrushOpacity 翻转为纯十六进制,并将 Alpha 通道设置为 50% 不透明度等效值。做到这一点;

<ProgressBar Background="#80000000" IsIndeterminate="True" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>

无论如何,希望这会有所帮助,干杯!

【讨论】:

  • 您提到的第二种解决方案不起作用,因为它本来会很棒。您能否发布第一个建议的示例,如果可行,我可以将其标记为答案?
  • 所以你去把那个动画从你的 ProgressBar Style 模板中拉出来,但它没有工作?
  • 我希望您不是指“您也可以尝试”部分,这取决于先修复该对象如何设置为 0 不透明度,这让我想知道您是否阅读了整个答案?
  • 我的错,我应该仔细看看。我尝试覆盖默认样式,但是它不起作用。您能否在答案中添加一段您测试并运行的代码?
  • 你如何展示你尝试过的东西,我会告诉你如何解决它。 :)
猜你喜欢
  • 2015-02-06
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多