翼度科技»论坛 编程开发 .net 查看内容

WPF中实现弹出进度条窗口

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
实现功能:
模拟一个任务开始执行,在窗口弹出一个进度条,展示执行进度,执行完成弹出提示框。例如做数据查询时,如果查询需要一段时间,操作人员可以很好的知道是否查询完成。
 
1. 设计进度条弹出窗口
进度条窗口样式设计 XAML
  1. <Window x:
  2.         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5.         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6.         xmlns:local="clr-namespace:WpfApp"
  7.         mc:Ignorable="d"
  8.         WindowStartupLocation="CenterScreen"
  9.         Window
  10.         ResizeMode="NoResize"
  11.         AllowsTransparency="True"
  12.         Topmost="True"
  13.         Title="ProgressBarWindow" Height="100" Width="800">
  14.     <Grid>
  15.         <ProgressBar Margin="5" x:Name="progressBar1"
  16.                      HorizontalAlignment="Stretch"
  17.                      Height="90"
  18.                      VerticalAlignment="Center"
  19.                      DataContext="{Binding}"
  20.                      Value="{Binding Progress}"
  21.                      Foreground="LightGreen"
  22.                      >
  23.            
  24.         </ProgressBar>
  25.     </Grid>
  26. </Window>
复制代码
 
进度条窗口后台代码:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Data;
  9. using System.Windows.Documents;
  10. using System.Windows.Input;
  11. using System.Windows.Media;
  12. using System.Windows.Media.Imaging;
  13. using System.Windows.Shapes;
  14. namespace WpfApp
  15. {
  16.     /// <summary>
  17.     /// ProgressBarWindow.xaml 的交互逻辑
  18.     /// </summary>
  19.     public partial class ProgressBarWindow : Window
  20.     {
  21.         public ProgressBarWindow()
  22.         {
  23.             InitializeComponent();
  24.             DataContext = new ProgressViewModel(this);
  25.         }
  26.     }
  27. }
复制代码
  
2.创建进度条视图模型ProgressViewModel
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Windows;
  8. namespace WpfApp
  9. {
  10.     public class ProgressViewModel : INotifyPropertyChanged
  11.     {
  12.         public event PropertyChangedEventHandler PropertyChanged;
  13.         private Window myWindow;
  14.         public ProgressViewModel(Window wnd)
  15.         {
  16.             myWindow = wnd;
  17.         }
  18.         protected virtual void OnPropertyChanged(string propertyName)
  19.         {
  20.             PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  21.         }
  22.         private int _progress;
  23.         public int Progress
  24.         {
  25.             get { return _progress; }
  26.             set
  27.             {
  28.                 _progress = value;
  29.                 PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Progress)));
  30.                 if (_progress == 100)
  31.                 {
  32.                     // 关闭进度窗口
  33.                     Application.Current.Dispatcher.Invoke(() =>
  34.                     {
  35.                         myWindow.Close();
  36.                     });
  37.                 }
  38.             }
  39.         }
  40.     }
  41. }
复制代码
 
3. 创建测试主窗口
主窗口XAML设计:
  1. <Window x:
  2.         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5.         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6.         xmlns:local="clr-namespace:WpfApp"
  7.         mc:Ignorable="d"
  8.         Title="MainWindow" Height="250" Width="400">
  9.     <Grid>
  10.         <Button x:Name="btnTest" FontSize="18" Click="btnTest_Click" Margin="10 30  10 30">开始任务...</Button>
  11.     </Grid>
  12. </Window>
复制代码
  
主窗口后台代码:
 
 
 
  1. using System;using System.Collections.Generic;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;namespace WpfApp{    ///     /// MainWindow.xaml 的交互逻辑    ///     public partial class MainWindow : Window    {        public MainWindow()        {            InitializeComponent();        }        private static ProgressBarWindow pgbWindow;        private async void btnTest_Click(object sender, RoutedEventArgs e)        {            // 创建进度窗口            pgbWindow = new ProgressBarWindow();            pgbWindow.Show();            // 模拟耗时任务            await Task.Run(() =>            {                for (int i = 0; i                     {                        pgbWindow.progressBar1.Value= i;                        Console.WriteLine(i);<Window x:
  2.         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5.         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6.         xmlns:local="clr-namespace:WpfApp"
  7.         mc:Ignorable="d"
  8.         WindowStartupLocation="CenterScreen"
  9.         Window
  10.         ResizeMode="NoResize"
  11.         AllowsTransparency="True"
  12.         Topmost="True"
  13.         Title="ProgressBarWindow" Height="100" Width="800">
  14.     <Grid>
  15.         <ProgressBar Margin="5" x:Name="progressBar1"
  16.                      HorizontalAlignment="Stretch"
  17.                      Height="90"
  18.                      VerticalAlignment="Center"
  19.                      DataContext="{Binding}"
  20.                      Value="{Binding Progress}"
  21.                      Foreground="LightGreen"
  22.                      >
  23.            
  24.         </ProgressBar>
  25.     </Grid>
  26. </Window>        });                    System.Threading.Thread.Sleep(20);                }            });            MessageBox.Show("任务完成!");        }    }}
复制代码
  
4. 测试验证如下

 

来源:https://www.cnblogs.com/flysh/p/18561960
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具