添加带有进度条的列表框项
本文关键字:列表 添加 | 更新日期: 2023-09-27 18:33:04
嘿,我想知道如何将具有完全工作进度条的列表框项添加到列表框中。
情况是:
我有一个用作动作日志的列表框,我在程序中有一个下载功能,当我开始下载时,它出现在日志中。
现在我想在日志中添加一个显示下载进度的进度条。
我自己尝试过,但不是很成功:
ListBoxItem lbitem = new ListBoxItem();
ProgressBar pb1 = new ProgressBar();
pb1.Width = 100;
pb1.Height = 20;
lbitem.Content = "Downloading file - " + pb1;
listbox1.Items.Add(lbitem);
但也许这让你知道我实际上想做什么。
我希望有人可以帮助我,
问候
杰克
我自己对 C# 相当陌生,所以我可能没有完整/正确的答案,但这是我在类似情况下所做的。
首先,如果您使用的是进度条,那么您需要知道正在加载的项目总数,以便您可以告诉进度条最大值是多少。然后,设置一个循环以向列表框加载数据并递增进度栏的计数。
关于循环的几句话:
如果进度条计数超过您设置的最大值,您将收到运行时错误。
如果你在列表框中加载了很多项目,那么不要每次都更新进度条,而是每 10、20、50、100 个项目更新一次(无论如何,你不应该有一个包含数千个项目的列表框,它效率很低)。
您可能需要刷新屏幕显示,以便在您处于紧密循环中时,用户可以看到进度条的运行情况。
这里有一个小示例"空气代码":
pb1.Maximum = maxNumberItemsToLoad;
for (int i==0; i<maxNumberItemsToLoad; i++)
{
lbItem = "String to add to Listbox"; //Read/Get your data to put into listbox here
listbox1.Items.Add(lbItem);
pb1.Increment(1);
//May need to do a this.Refresh(); here if pb1 does not update
}
在你的代码中:
...
lbitem.Content = pb1;
...
在 XAML 中,在列表框的实例上:
<ListBox ...>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Downloading file - " VerticalAlignment="Center"/>
<ContentPresenter Content="{Binding }"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
....
</ListBox>
更好的方法是拥有一个列表来保存每个项目的进度(即进度条的值),并且ProgressBar
是DataTemplate
的一部分。
你最好使用 ListView
来添加ProgressBar
。
看看这个:一个更容易使用的ListView。