使用Progressbar添加ListBoxItem

时间:2012-05-02 23:02:36

标签: c# wpf listbox progress-bar

嘿,我想知道如何将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);

但也许这会让你知道我真正想做的事情。

我希望有人可以帮我解决这个问题,

的问候,

杰克

3 个答案:

答案 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>

更好的方法是拥有一个包含每个项目进度的列表(即进度条的值),ProgressBarDataTemplate的一部分。

答案 2 :(得分:0)

您最好使用ListView添加ProgressBar

看看这个:A much easier to use ListView