在处理一组项目时,我想显示一个关于组状态的统一图像,所以我基本上在同一个单元格中创建了一个具有透明背景和各种彩色前景的多个进度条的网格。
我遇到了一些透明效果(紫色条纹在绿色下面实际上是紫色的,有时它会覆盖在顶部等)并且它看起来有点浪费。所以,我决定自己做,但现在我有点瘫痪如何做到这一点。我是否在FrameworkElement的OnRender中使用DrawingContext,还是有更简单的东西?在进行自己的控制时是否有一套通用规则?
我考虑转换到饼图,因为这些很容易找到,但是我很快就做了一些不是现成的东西。
谢谢!
答案 0 :(得分:1)
我不太确定你打算如何让进度条结合不同的进展,但是如果说进展最远的是z-index的最低点而且进展最少的是顶部,那么我会做事情就是这样:
1)我可能会为这个新的progresbar创建一个用户控件。
2)它将有一个名为NumberOfProgresses的属性,它与包含所述进程状态的数组绑定。
3)每个进度都将由一个Border项(或者更适合可视树的东西)表示,因为它是一个带有background属性的简单wpf控件。 background属性将被设置为nice看起来的进度样式,并且可以在样式中绑定进度颜色以表示border的borderbrush属性。可以轻松设置进度的颜色。
4)用户控件将有一个方法UpdateProgress,它将数组中的百分比值和进度索引作为参数。
5)随着进度的更新,您可以,只需计算边框的适当宽度(用户控制实际宽度*百分比),然后使用Z索引进行播放,使其显示在顶部/底部,或叠加边框如此,首先将进度设置为最小值,然后对于其余的进度,您必须减去先前的进度长度以获得相同的效果。
这样就没有透明度引起的伪像,也没有OnRender()...... 请注意,在WPF中,应该没有理由将OnRender与OnRender混淆,就像在WinForms中使用OnPaint一样。 只需通过代码设置元素以获得您想要的外观,并让WPF进行渲染;)
我可以想象这个用户控件存在一个问题。您必须向用户提供有关哪种颜色属于哪种进度的反馈。但这可能会让你回到原点,这意味着只显示多个进度条会更好/更简单。