进度条2种颜色

5

我有一个关于在 C# 的 WPF 中的 ProgressBar 的问题。我希望我的 progressBar 有两种颜色。例如,我将其最大值设为 25,在第七和第五次迭代中出现错误,我希望在我的 progressbar 中以红色显示。

我添加了一个示例图片,展示我想要达到的效果。

enter image description here


前面评论中提到的答案是针对Windows.Forms的,而OP的问题是关于WPF的。虽然他仍然需要“超类”他的控件(使用自定义样式模板?),但方法将完全不同。 - rs232
1个回答

1
您可以使用GradiantBrush并根据您的逻辑设置GradientStops,这种解决方案的唯一缺点是GradientStops不可绑定,因此您必须从代码中设置它们。以下是一个简单的示例:
 <ProgressBar Width="500" Value="70" Height="30">
        <ProgressBar.Foreground>
            <LinearGradientBrush StartPoint="0,0" EndPoint="1,0" >

                <GradientStop Color="Green" Offset="0" />
                <GradientStop Color="Green" Offset="0.3" />
                <GradientStop Color="Red" Offset="0.3" />
                <GradientStop Color="Red" Offset="0.5" />
                <GradientStop Color="Green" Offset="0.5" />
                <GradientStop Color="Green" Offset="1" />

            </LinearGradientBrush>
        </ProgressBar.Foreground>
    </ProgressBar>

输出:

enter image description here


但是我该如何解决这个问题: 我的进度条最大值取决于文本文件中的行数(它可能不同,有时是3行,有时是1238行),例如对于这1238行,将会有5个随机操作失败,每个操作都是进度条上的一个点。我该如何将程序中的最大值绑定到xaml,并如何使用它?我看到的是进度条颜色的百分比填充,但我真的不知道该怎么做? - konto zprzypadku
线性渐变画刷中的偏移量从0到1,您可以通过更改比例将其映射到您的行数(),每当进度出现问题时,只需添加两个GradientStop(一个绿色的结束前一个进度,和一个红色的开始呈现失败)等等... - SamTh3D3v
好的,谢谢,我明白了。但是我怎么在XAML文件中设置一个变量呢? - konto zprzypadku
给上述的LinearGradientBrush起一个名字,比如说:Name="MyLinearGradiantBrush",现在无法从xaml中添加GradientStop(它们不是FrameworkElement,因此无法绑定),需要在代码后台中在需要时添加:MyLinearGradiantBrush.GradientStops.Add(new GradientStop(Colors.Red, _yourCalculatedOffset)); - SamTh3D3v
我在 DivideImage.cs(类)中计算我的偏移量,而不是在 MainWindows.xaml.cs 中,那么我该怎么做才能访问它们?抱歉,我对 WPF 还不熟悉。 - konto zprzypadku
如果您在另一个类中定义了偏移量的集合,那么在某个时候,您需要在主viewModel(或MainWindows.xaml.cs)中实例化该类,将该集合定义为属性,并在MainWindows.xaml.cs中使用它。 很抱歉,但是在没有看到您的代码之前,这是我能做到的最好的解释;)如果您想要更精确的帮助,请在问题中添加更多的描述/代码:) - SamTh3D3v

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接