我正在编写一个下载程序。现在我需要制作一个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());
}
}
答案 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属性所在的项目中。