我不太确定您打算如何将进度条组合起来,但是如果说最远的进度在z-index的底部,最少的进度在顶部,那么我会按照以下方式进行:
1)我可能会为这个新的进度条创建一个用户控件。
2)它将具有一个名为NumberOfProgresses的属性,该属性与包含所述进度状态的数组相关联。
3)每个进度都由一个Border项(或者可能是更适合于视觉树的其他内容)表示,因为它是一个简单的wpf控件,具有背景属性。背景属性将设置为漂亮的进度样式,并且进度颜色可以绑定到边框的borderbrush属性中。这样可以轻松设置进度的颜色。
4)用户控件将具有一个UpdateProgress方法,该方法以百分比值和数组中进度的索引作为参数。
5) 随着进度的更新,您可以计算边框的适当宽度(用户控件实际宽度*百分比),并玩弄Z索引以使其显示在顶部/底部,或者水平堆叠边框,将最小进度设置为第一项,然后对于其他进度,您必须减去先前进度的长度以获得相同的效果。
这样就不会有透明度引起的伪影和没有OnRender()... 请注意,在WPF中,没有理由像在WinForms中需要OnPaint那样搞OnRender这个和OnRender那个。 只需通过代码设置元素以获得所需的外观,让WPF进行渲染即可;)
我可以想象这个用户控件可能会遇到一个问题。您必须向用户提供反馈,以了解哪种颜色属于哪种进度。但是,这可能会使您回到原点,这意味着最好/更简单的方法是显示多个进度条。