2012-05-02 112 views
0

嘿,我想知道如何可以添加一个ListBoxItem与一个完整的工作进度条到列表框。添加ListBoxItem与进度条

的情况是:

我作为Actionlog一个ListBox,我已经在节目中downloadfunction,当我开始下载它出现在日志中。

现在我想添加一个进度条到显示downloadprogress的日志。

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

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

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

     listbox1.Items.Add(lbitem); 

但也许这会给你一个想法是什么实际上,我试图做的。

我希望有人能帮助我这个,

问候,

杰克

回答

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 
} 
+0

猜猜你误解了一些东西。我不想为每个添加的项目填充进度条。这是一个应该看起来像这样的日志:http://s7.directupload.net/images/120503/9vx8zjc4。png 我只用xaml这样做很简单,但我需要知道如何在代码隐藏中添加像这样的listboxitem。 – JakeFrost77

+0

我现在自己找到了解决方案,我只需要使用一个容器,在我的情况下是一个StackPanel并将进度条添加到它。然后我可以将StackPanel添加到我的项目并将其添加到列表框中。完美的作品 – JakeFrost77

0

在您的代码:

... 
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的一部分。