如何在WPF中实现类似Android的ProgressDialog效果

 我来答
百度网友ded4135
高粉答主

2016-05-10 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.7万
采纳率:87%
帮助的人:1.3亿
展开全部

前台代码

   <Grid Style="{StaticResource ContentRoot}">
       <TextBlock Name="tb_progress" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
       <mui:ModernProgressRing IsActive="True" Width="80" Height="80" Style="{Binding SelectedItem.Tag, ElementName=CmbRingStyle}" />
   </Grid>
</Window>
 

代码中的“mui:ModernProgressRing” 是ModernUI中的一个控件,同学们也可以自己来实现同样的效果,或者使用ProgressBar来替代,这里就不赘述了。

后台代码

using FirstFloor.ModernUI.Windows.Controls;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Zero_Gjy.Helper;

namespace Zero_Gjy.UserControls
{
   /// <summary>
   /// Interaction logic for MProgressBar.xaml
   /// </summary>
   public partial class MProgressBar : Window, INotifyPropertyChanged
   {
       double progress;
       string progreesStr;

       public event PropertyChangedEventHandler PropertyChanged;

       public double Progress
       {
           get
           {
               return progress;
           }

           set
           {
               progress = value;
               ProgreesStr = (int)(value/Max * 100) + "%";
           }
       }

       public string ProgreesStr
       {
           get
           {
               return progreesStr;
           }

           set
           {
               progreesStr = value;
               if(PropertyChanged != null)
               {
                   this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("ProgreesStr"));
               }
           }
       }

       public MProgressBar()
       {
           InitializeComponent();
           this.tb_progress.SetBinding(TextBlock.TextProperty, new Binding("ProgreesStr") { Source = this });
       }
       public int Max = 100;
       public void Show(Window parent,int max)
       {            
           Max = max;
           this.Progress = 0;
           this.Owner = parent;
           this.Owner.Opacity = 0.7;
           this.Owner.IsEnabled = false;
           this.Show();
       }
       public void UpdateProgress(int progress)
       {
           this.Progress = progress;
       }
       public void CloseWindow()
       {
           this.Close();
           this.Owner.Opacity = 1;
           this.Owner.IsEnabled = true;
       }
   }
} 后台代码将进度值和前台的TextBlock绑定,实现进度的更新,特别要注意的是这几句

this.Owner = parent;//父窗口
           this.Owner.Opacity = 0.7;//置灰
           this.Owner.IsEnabled = false;//禁用
           this.Show();//子窗口模式显示

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式