WPF中文网

ProgressBar进度条

ProgressBar进度条通常在我们执行某个任务需要花费大量时间时使用,这时可以采用进度条显示任务或线程的执行进度,以便给用户良好的使用体验。

一、ProgressBar类定义

public class ProgressBar : RangeBase
{
    public static readonly DependencyProperty IsIndeterminateProperty;
    public static readonly DependencyProperty OrientationProperty;

    public ProgressBar();

    public bool IsIndeterminate { get; set; }
    public Orientation Orientation { get; set; }

    public override void OnApplyTemplate();
    protected override AutomationPeer OnCreateAutomationPeer();
    protected override void OnMaximumChanged(double oldMaximum, double newMaximum);
    protected override void OnMinimumChanged(double oldMinimum, double newMinimum);
    protected override void OnValueChanged(double oldValue, double newValue);

}

ProgressBar自身只有两个属性,分别是IsIndeterminate和Orientation 。

IsIndeterminate属性:如果为true,表示以动画从左到右滑动的方式展示进度效果。

Orientation属性:表示进度条的方式,水平时从左至右增长,垂直时从下到上增长。

二、ProgressBar例子

前端代码

<Window x:Class="HelloWorld.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:HelloWorld"
        mc:Ignorable="d" FontSize="16"
        Title="WPF中文网之控件课程 - www.wpfsoft.com" Height="350" Width="500">
    <StackPanel VerticalAlignment="Center">
        <ProgressBar x:Name="_ProgressBar" 
                     IsIndeterminate="False"  
                     Value="50" 
                     Minimum="0" 
                     Maximum="100" 
                     Orientation="Horizontal" 
                     Height="10" 
                     Margin="15"/>
        <TextBlock x:Name="_TextBlock" 
                   Text="50%" 
                   HorizontalAlignment="Center"/>
    </StackPanel>
</Window>

后端代码

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Loaded += (s, e) =>
            {
                Task.Factory.StartNew(() =>
                {
                    for (int i = 0; i <= 100; i++)
                    {
                        Dispatcher.Invoke(() => {

                            _TextBlock.Text = $"{i}%";
                            _ProgressBar.Value = i;
                        });
                        
                        Task.Delay(25).Wait();
                    }
                });
            };

        }
    }

三、代码分析

我们在主窗体的Loaded事件中增加了一个子线程,需要注意的是,在子线程中不可以直接更新UI线程的控件,所以我们利用Dispatcher类,将访问UI线程的代码成成一个匿名函数,交给Dispatcher去执行。F5运行后,您将看到一个进度条从0增长到100。

当前课程源码下载:(注明:本站所有源代码请按标题搜索)

文件名:032-《ProgressBar进度条》-源代码
链接:https://pan.baidu.com/s/1yu-q4tUtl0poLVgmcMfgBA
提取码:wpff

——重庆教主 2023年8月30日

copyright @重庆教主 WPF中文网 联系站长:(QQ)23611316 (微信)movieclip (QQ群).NET小白课堂:864486030 | 本文由WPF中文网原创发布,谢绝转载 渝ICP备2023009518号-1