Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF自定义绘制多个进度条_Wpf_Custom Controls_Progress Bar - Fatal编程技术网

WPF自定义绘制多个进度条

WPF自定义绘制多个进度条,wpf,custom-controls,progress-bar,Wpf,Custom Controls,Progress Bar,在处理一组项目时,我希望显示该组状态的统一图像,因此我基本上在同一个单元格中制作了一个由多个进度条组成的网格,这些进度条具有透明的背景和各种颜色的前景 我遇到了一些透明工件(紫色条实际上在绿色下面是紫色的,有时它会在顶部画出来,等等),这看起来有点浪费。所以,我决定做我自己的,但现在我在如何做上有点麻痹。我是在FrameworkElement的OnRender中使用DrawingContext,还是有更简单的方法?当涉及到自己的控制时,是否有一套通用规则 我考虑换成一个饼图,因为它们很容易得

在处理一组项目时,我希望显示该组状态的统一图像,因此我基本上在同一个单元格中制作了一个由多个进度条组成的网格,这些进度条具有透明的背景和各种颜色的前景

我遇到了一些透明工件(紫色条实际上在绿色下面是紫色的,有时它会在顶部画出来,等等),这看起来有点浪费。所以,我决定做我自己的,但现在我在如何做上有点麻痹。我是在FrameworkElement的OnRender中使用DrawingContext,还是有更简单的方法?当涉及到自己的控制时,是否有一套通用规则

我考虑换成一个饼图,因为它们很容易得到,但现在是我做一些不现成的事情的时候了


谢谢

我不太确定您打算如何使用progressbar来组合不同的进度,但是如果说最远的进度在z索引的底部,而最短的进度在顶部,那么我会做以下几行:

1) 我可能会为这个新的progresbar创建一个用户控件

2) 它将有一个名为NumberOfProgress的属性,该属性与包含所述进程状态的数组绑定

3) 每个进度都将由一个边框项(或者更适合可视化树的某个项)表示,因为它是一个带有background属性的简单wpf控件。background属性将设置为美观的进度样式,进度颜色可以绑定在样式中,表示边框的borderbrush属性。可以轻松设置进度的颜色

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

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

这样就不会有透明诱导的瑕疵,也不会有OnRender()。。。 请注意,在WPF中,不应该像WinForms中需要OnPaint一样,处理OnRender this和OnRender this。 只需通过代码设置元素以获得所需的外观,然后让WPF进行渲染;)


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

因此,这可能只是一个.cs文件?取决于您如何创建用户控件。如果您不打算在其他应用程序中重用它,那么您可能会向您的解决方案中添加一个新的wpf UserControl,它由xaml和cs组成。在xaml部分中,您将定义事物的基本布局,主要是表示进程的边界项的容器。在cs文件中,您将编写代码,实际创建新边框并将其放入容器中,还有更新进度方法。。。