3

在处理一组项目时,我想显示一个组状态的统一图像,所以我基本上在同一个单元格中制作了一个由多个具有透明背景和各种彩色前景的进度条组成的网格。

示例图像

我遇到了一些透明度伪影(紫色条实际上是绿色下面的紫色,有时它会在顶部绘制等),这似乎有点浪费。所以,我决定自己做,但现在我对如何做有点不知所措。我是在 FrameworkElement 的 OnRender 中使用 DrawingContext,还是有更简单的方法?在进行自己的控制时,是否有一套通用规则?

我考虑改用饼图,因为这些很容易获得,但现在是我做一些非现成的事情的时候了。

谢谢!

4

1 回答 1

1

我不太确定你打算如何让进度条组合不同的进度,但是如果说最远的进度在 z-index 的底部,而最少的进度在顶部,那么我会在这行:

1)我可能会为这个新的进度条创建一个用户控件。

2) 它将有一个名为 NumberOfProgresses 的属性,该属性与包含所述进度状态的数组相关联。

3) 每个进度都将由一个边框项(或者可能更适合可视树的东西)表示,因为它是一个具有背景属性的简单 wpf 控件。background 属性将设置为漂亮的进度样式,进度颜色可以绑定在样式中,以表示边框的borderbrush 属性。使设置进度的颜色变得容易。

4) 用户控件将有一个 UpdateProgress 方法,该方法将数组中的百分比值和进度索引作为参数。

5)随着进度的更新,您可以只计算边框的适当宽度(用户控制实际宽度 * 百分比)并使用 Z 索引使其显示在顶部/底部,或者水平堆叠边框,设置首先是最少的进度,然后对于其余的进度,您必须减去以前的进度长度才能获得相同的效果。

这样就不会出现透明度引起的伪影,也不会出现 OnRender()...请注意,在 WPF 中,没有理由将 OnRender this 和 OnRender that 搞乱,就像 WinForms 和 OnPaint 一样。只需通过代码设置元素以获得您想要的外观,然后让 WPF 进行渲染;)

不过,我可以想象这个用户控件存在一个问题。您必须向用户提供关于哪种颜色属于哪个进度的反馈。但这可能会让你回到第一方,这意味着只显示多个进度条会更好/更简单。

于 2010-07-21T18:14:08.093 回答