2013-09-23 24 views
0

我有一个进度条在我的MainPage.xaml中:的Windows Store应用 - 使用进度条在下载类

<ProgressBar HorizontalAlignment="Center" 
       Height="90" Margin="0,-30,0,0" 
       VerticalAlignment="Center" 
       Width="600" x:Name="BarProgress" /> 

然后在MainPage.xaml.cs中有下载数据的代码:

public async Task Download(string fileName, string fileId) 
private async Task HandleDownloadAsync(DownloadOperation download, bool start) 
private async Task DiscoverActiveDownloadsAsync() 
private void DownloadProgress(DownloadOperation download) 
     {    
      double percent = 100; 
      if (download.Progress.TotalBytesToReceive > 0) 
      { 
       percent = download.Progress.BytesReceived * 100/download.Progress.TotalBytesToReceive; 
      } 

      BarProgress.Value = percent;       
     } 

它的效果很好!我可以看到ProgressBar的进展,直到下载结束!

但是,如果我想创建一个新的类,如DownloadData.xaml.cs,然后把所有代码下载数据,我怎么能调用BarProgress.Value?!? 我做了很多尝试,例如MainPage.BarProgress.Value =百分比,但我收到很多错误,因为BarProgress是不可访问的...

+0

由于它有一个保护级别的错误,你可以分享更多的DownloadData类代码吗?更具体的类和方法签名? – Danexxtone

+0

我用最后的理解修改了一下这个问题! – CaptainAmerica

+0

它们是线程相关的错误还是保护级别错误?如果它们是保护级别,则可能需要将进度条移至downloaddata.xaml。我只是在这里大声思考。 – Danexxtone

回答

0

我可能会将进度条移动到DownloadData.xaml用户控件。这样,每次下载数据时,都会有自己的进度条,可以从后面的代码中访问。如果你真的不想这样做,另一种方式可能是搜索控件并尝试以这种方式抓住它。一些有用的技巧在这里:Find controls编辑:为您的项目创建子文件夹UserControls右键单击您的项目并添加用户控件。这将在页面后面添加一个xaml页面和一个xaml.cs代码。接下来,您想添加控制here。这应该做到这一点。

+0

好主意有一个DownloadData.xaml ...我怎么能嵌套到MainPage.xaml? – CaptainAmerica

+0

感谢您的帮助Danexxtone!它似乎是迄今为止最好的方法!我能够创建带有ProgressBar的UserControl并导入到我的Main XAML中,但是如果我将BarProgress.Value = 2放入构造函数中UserControl它工作的很好,但如果我会更新下载过程中的值ProgressBar.Value不刷新...这是一个问题,因为我们采用了这种解决方案作为解决方法!!!!!先谢谢了! – CaptainAmerica

+0

目前该任务没有更新UI线程,我们必须对此进行说明。你可以搜索这个问题(这里有很多解决方案)或者向我展示DownloadData.xaml和xaml.cs的代码,我们将看看我们是否可以更新你的代码。 – Danexxtone