0

嘿,我想知道如何将具有完整工作进度条的 ListBoxItem 添加到 ListBox。

情况是:

我有一个用作 Actionlog 的 ListBox,我在程序中有一个下载功能,当我开始下载时,它会出现在日志中。

现在我想在显示下载进度的日志中添加一个进度条。

我自己尝试过,但不是很成功:

        ListBoxItem lbitem = new ListBoxItem();
        ProgressBar pb1 = new ProgressBar();
        pb1.Width = 100;
        pb1.Height = 20;

        lbitem.Content = "Downloading file - " + pb1;

        listbox1.Items.Add(lbitem);

但也许这让你知道我实际上想要做什么。

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

问候,

杰克

4

3 回答 3

0

您最好使用ListView添加ProgressBar.

看看这个:一个更容易使用的 ListView

于 2012-05-21T14:11:00.587 回答
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
}
于 2012-05-03T00:16:03.947 回答
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.

于 2012-05-06T17:25:52.883 回答