嘿,我想知道如何将ListBoxItem与一个完全正常工作的Progressbar一起添加到ListBox。
情况是:
我有一个用作动作日志的ListBox,我在程序中有一个下载功能,当我开始下载它时会出现在日志中。
现在我想在日志中添加一个进度条,显示下载进度。
我自己尝试但不是很成功:
ListBoxItem lbitem = new ListBoxItem();
ProgressBar pb1 = new ProgressBar();
pb1.Width = 100;
pb1.Height = 20;
lbitem.Content = "Downloading file - " + pb1;
listbox1.Items.Add(lbitem);
但也许这会让你知道我真正想做的事情。
我希望有人可以帮我解决这个问题,
的问候,
杰克
答案 0 :(得分:0)
我自己对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
}
答案 1 :(得分:0)
在您的代码中:
...
lbitem.Content = pb1;
...
在XAML中,在ListBox的实例上:
<ListBox ...>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Downloading file - " VerticalAlignment="Center"/>
<ContentPresenter Content="{Binding }"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
....
</ListBox>
更好的方法是拥有一个包含每个项目进度的列表(即进度条的值),ProgressBar
是DataTemplate
的一部分。
答案 2 :(得分:0)
您最好使用ListView
添加ProgressBar
。