2016-02-02 2 views
0

В моем проекте я просто копирую некоторые файлы из источника в пункт назначения. Во время копирования файлов я увеличиваю значение прогресса. Теперь я хочу добавить содержимое ярлыков, которое будет «Копировать» во время копирования, и затем это будет «завершено» после завершения копирования файла. Мой код не работал.Как изменить содержание метки на основе процента прогресса

 <StackPanel> 
      <StackPanel.Resources> 
       <Style TargetType="Label"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding ProgressPercentage}" Value="0"> 
          <Setter Property="Visibility" Value="Hidden"/> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding ProgressPercentage}" Value="100"> 
          <Setter Property="Content" Value="Completed"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style>      
      </StackPanel.Resources > 
      <Label Content="Copying Files" Height="30" Width="100"/> 
     </StackPanel > 
+1

Вам нужно добавить дополнительные пояснения и, возможно, несколько кодов к вашему вопросу, чтобы было ясно, –

+0

Надеюсь, вы обновите ProgressPercentage. В строке прогресса вы обновляетесь в фоновом потоке? Если да, то вам нужно использовать диспетчер, чтобы обновить что-либо в основном потоке –

+0

Пожалуйста, будьте более конкретными и включите хороший [mcve], который надежно воспроизведет любую проблему, с которой вы сталкиваетесь. Немного XAML, который вы показали здесь, похоже, будет делать то, что вы хотите, если значение 'ProgressPercentage' достигает 100. По-видимому, этого не происходит. Но без лучшего примера кода невозможно определить, какую ошибку вы совершили. –

ответ

0

Вы должны использовать фонового работника для обновления прогресса во время обработки.

Определение фона рабочего:

private BackgroundWorker SyncBgWorker = new BackgroundWorker(); 

Добавьте необходимые мероприятия для фона рабочего

SyncBgWorker.DoWork += new DoWorkEventHandler(SyncBgWorkerOnDoWork);// the process should be here 
      SyncBgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);// if the process completed do this 
      SyncBgWorker.ProgressChanged += worker_ProgressChanged;//while processing do this 
SyncBgWorker.WorkerSupportsCancellation = false; 
      SyncBgWorker.WorkerReportsProgress = true;//to get the progress 

В События/Методы

private void SyncBgWorkerOnDoWork(object sender, DoWorkEventArgs doWorkEventArgs) 
     { 
      //some codes 
      SyncBgWorker.ReportProgress(10);//to update the progress value 
     //some codes 
      SyncBgWorker.ReportProgress(50);//to update the progress value 
     //some codes 
      SyncBgWorker.ReportProgress(100);//to update the progress value 
     } 

private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e) 
     { 
      var objProgressBar = (ProgressBar)this.GetTemplateChild("PrgBarSyncProgress"); 
      UpdateProgressBarDelegate updatePbDelegate = new UpdateProgressBarDelegate(objProgressBar.SetValue); 
      Dispatcher.Invoke(updatePbDelegate, System.Windows.Threading.DispatcherPriority.Background, new object[] { ProgressBar.TagProperty, "Synchronizing " + e.ProgressPercentage.ToString() + "%" }); 
     } 

не забудьте изменить название вашего индикатора выполнения 'PrgBarSyncProgress'

Смежные вопросы