总进度条

时间:2015-10-23 15:19:56

标签: c# wpf progress-bar

enter image description here

我正在编写一个下载程序。现在我需要制作一个Total ProgressBar。但我不知道如何,我知道我需要计算总下载大小。

由于下载在列表中,我可能会将进度条绑定到列表的Count属性。或者有更好的方法。下面是Song ProgressBars的代码。

抱歉我的英文不好!

private void MainWindow_bytesDownloaded(ByteArgs e, Song songObj) {

            if (songObj != null) {
                gui.Invoke(() => new Action(() => {
                    EditState(State.DOWNLOADING, songObj);

                    foreach (var item in _downloadList) {
                        if (item.SongName == songObj.SongName) {
                            item.Maximum = (int)e.total;
                            item.Value += (int)e.downloaded;
                            AllMaximum += e.total;
                            break;
                        } 
                    }
                }).Invoke());
            }
        }

1 个答案:

答案 0 :(得分:1)

这是一个比例。

你知道酒吧的全长 您知道下载的进度(以字节为单位) 您知道下载的全长(以字节为单位)。

1)对于单个下载进度... 解决x:

x/(full_bar_length) = (current_progress)/(full download length)<br>
x = ((current_progress)/(full download length)) * full_bar_length

然后将进度的长度绑定到x。

2)对于&#34;总计的情况:&#34;

汇总所有下载的总字节数 将所有下载中下载的当前字节数相加。

解决x:

x/(full_bar_length) = (sum_current_bytes)/(total_bytes_sum)<br>
x = ((sum_current_bytes)/(total_bytes_sum)) * (full_bar_length)

再次,将x绑定到您的总体当前进度&#34;。

就UI而言,List(_downloadList)绑定到ItemsControl的ItemsSource:

<ItemsControl ItemsSource="{Binding _downloadList}">
  <ItemsControl.ItemTemplate>
    <DataTemplate>
       <Grid Margin="10">
          <Rectangle Fill="Green" Width="{Binding RatioValue}" Height="50" />
       </Grid>
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>

我还没有尝试过,但它应该接近你所要求的 - 如何根据物品的价值填充每个项目的矩形。

您需要向Download类添加一个新属性,并根据Value计算RatioValue,并将其放在Value属性所在的项目中。