我在我的应用程序中添加了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>
但是,仍然没有果汁。
答案 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>
答案 1 :(得分:1)
如果您查看模板底部的default template Background
TemplateBinding
,x: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}}
无论如何,希望这有帮助,干杯!