ProgressBar后台属性在Windows应用商店应用中不起作用

时间:2014-10-14 18:21:37

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

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

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

在预览窗口中,一切看起来都不错,但是,当我运行我的应用时,Background根本就不存在。我发现的解决方案是将ProgressBar放在网格中并在Background中设置Grid属性,但由于预览显示正确,并且属性在那里,所以它有用吗?
更新:

基于@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>

但是,仍然没有果汁。

2 个答案:

答案 0 :(得分:4)

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

  

文档大纲&gt;右键单击进度条&gt;编辑模板 - &gt;编辑副本

<!--
<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>

enter image description here

答案 1 :(得分:1)

如果您查看模板底部的default template Background TemplateBindingx:Name="DeterminateRoot"只有<DoubleAnimation Storyboard.TargetName="DeterminateRoot" Storyboard.TargetProperty="Opacity" To="0" Duration="0" /> 的{​​{1}}这是您从Background属性中看到颜色集的唯一地方。

然后,如果你爬过不确定状态的故事板,你会发现;

IsIndeterminate="True"

...并且您已将ProgressBar设置为Border,因此您可以明确地将接受Background属性的地方设置为零不透明度。

所以你可以将该动画从该状态的故事板中拉出来,或者放入你自己的新对象来设置你的东西,或者只是把你提到的解决方法扔到Grid或者SolidColorBrush或其他东西,并以其他可能性的方式这样做。

您也可以尝试(一旦您从故事板修复了不透明度设置问题),只需将Opacity<ProgressBar Background="#80000000" IsIndeterminate="True" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/> 翻转为纯粹的十六进制,Alpha通道设置为50%不透明度当量。做到这一点;

{{1}}

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