添加带有进度条的列表框项

本文关键字:列表 添加 | 更新日期: 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>

更好的方法是拥有一个列表来保存每个项目的进度(即进度条的值),并且ProgressBarDataTemplate的一部分。

你最好使用 ListView 来添加ProgressBar

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