C# 如何根据进度百分比更改标签内容

C# 如何根据进度百分比更改标签内容,c#,C#,在我的项目中,我只是将一些文件从源复制到目标。在复制文件期间,我会增加进度值。现在,我想添加一个标签内容,在复制过程中是“复制”,然后在完成文件复制后是“完成”。我的代码不起作用 <StackPanel> <StackPanel.Resources> <Style TargetType="Label"> <Style.Triggers>

在我的项目中,我只是将一些文件从源复制到目标。在复制文件期间,我会增加进度值。现在,我想添加一个标签内容,在复制过程中是“复制”,然后在完成文件复制后是“完成”。我的代码不起作用

      <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 >

在处理过程中,您必须使用后台工作程序来更新进度

定义后台工作程序:

 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”的名称。

您需要在问题中添加更多的解释,可能还有更多的代码,以使问题更清楚。我希望您能更新进度百分比。对于进度条,您是否正在后台线程中更新?如果是,那么您需要使用dispatcher来更新主线程上的任何内容。请更具体地说,并包括一个可靠地再现您遇到的任何问题的好程序。假设
ProgressPercentage
值确实达到
100
,那么这里显示的一点XAML似乎就是做您想要做的事情。所以这大概不会发生。但是如果没有更好的代码示例,就不可能识别出您所犯的任何错误。