UI⑥Control族控件ProgressBar

Object->DispatcherObject->DependencyObject->Visual->UIElement->FrameworkElement->Control->RangeBase->ProgressBar


ProgressBar

指示操作进度

ProgressBar控件包含一个窗口,默认情况下,该窗口在操作过程中以从左到右的方式填充。 控件具有一个范围和一个当前位置。

ProgressBar 重写Maximum 属性的元数据 ,并将其默认设置为100。 ProgressBar 重写Focusable 属性的元数据 ,并将其默认设置为 false 。 有关详细信息,请参阅依赖项属性概述

自定义 ProgressBar 控件

若要对多个 ProgressBar 控件应用相同的属性设置,请使用 Style 属性。 您可以修改ControlTemplate 默认值 ,为控件指定独特的外观。 有关创建 ControlTemplate 的详细信息,请参阅 通过创建 System.windows.controls.controltemplate> 自定义现有控件的外观。 若要查看特定于 ProgressBar 的部分和状态,请参阅 ProgressBar 样式和模板

此控件的依赖属性可能由控件的默认样式设置。 如果按默认样式设置属性,则当控件出现在应用程序中时,属性可能会更改为默认值。 默认样式取决于应用程序运行时使用的桌面主题。 有关详细信息,请参阅 默认的 WPF 主题

只有视觉对象属性已存在于控件的默认模板中并且已使用 TemplateBinding 设置时,设置该属性才有效。 在通过创建 ControlTemplate 自定义现有控件的外观一文的更改控件的视觉结构部分可以找到视觉属性列表。

名称备注权限

IsIndeterminateProperty

标识 IsIndeterminate 依赖项属性。public static readonly

OrientationProperty

标识 Orientation 依赖项属性。public static readonly
名称备注权限

IsIndeterminate

获取或设置 ProgressBar 是显示实际值,还是显示一般的连续进度反馈。get; set;

Orientation

获取或设置 ProgressBar 的方向:水平或垂直。get; set;
名称备注权限

OnApplyTemplate

在将模板应用于 ProgressBar 时调用。public

OnCreateAutomationPeer

提供 ProgressBarAutomationPeer 此控件的适当实现,作为 WPF 自动化基础结构的一部分。protected

OnMaximumChanged

当 Maximum 属性更改时,更新 ProgressBar 的当前位置。protected

OnMinimumChanged

当 Minimum 属性更改时,更新 ProgressBar 的当前位置。protected

OnValueChanged

当 Value 属性更改时,更新 ProgressBar 的当前位置。protected

RangeBase

表示具有特定范围内值的元素。

RangeBase控件的Value 可在Minimum 和Maximum 属性之间设置的 。 RangeBase视觉上反应其 Value值 。 在某些情况下,用户可以以交互方式设置值;在其他情况下,只能以编程方式设置值。 用户可以设置 ScrollBar 的Value 和Slider ,但不能设置 ProgressBar 。

字段
名称备注权限
LargeChangeProperty标识 LargeChange 依赖项属性。public static readonly
MaximumProperty标识 Maximum 依赖项属性。public static readonly
MinimumProperty标识 Minimum 依赖项属性。public static readonly
SmallChangeProperty标识 SmallChange 依赖项属性。public static readonly
ValueChangedEvent标识 ValueChanged 路由事件。public static readonly
ValueProperty标识 Value 依赖项属性。public static readonly
属性
名称备注权限

LargeChange

获取或设置要从 Value 控件的 RangeBase 加上或减去的值。get; set;

Maximum

获取或设置范围元素的最大可能的 Valueget; set;

Minimum

获取或设置范围元素的 Minimum 可能的 Valueget; set;

SmallChange

获取或设置要从 Value 控件的 Value 加上或减去的 RangeBaseget; set;

Value

获取或设置范围控件的当前数量。get; set;
方法
名称备注权限

OnMaximumChanged

当 Maximum 属性更改时调用。protected

OnMinimumChanged

当 Minimum 属性更改时调用。protected

OnValueChanged

引发 ValueChanged 路由事件。protected

ToString

提供 RangeBase 对象的字符串表示形式。public
事件
名称备注

ValueChanged

在范围值改变时发生。

 


XAML范例

Orientation:动画方向。

Background:背景色

Foreground:进度颜色

这个控件比较简单,所以其余属性不做详细说明。

<Window
    x:Class="ProgressBarDemo.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:local="clr-namespace:ProgressBarDemo"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
    <DockPanel>
        <TextBlock DockPanel.Dock="Top"/>
        <ProgressBar
            x:Name="progressBar"
            Height="20"
            VerticalAlignment="Bottom"
            DockPanel.Dock="Bottom"
            IsIndeterminate="False"
            
            Minimum="1"
            Maximum="100"
            
            Orientation="Horizontal" 
            Value="1"
            ValueChanged="OnValueChanged">
            <ProgressBar.Triggers>
                <EventTrigger RoutedEvent="ProgressBar.Loaded">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation
                            Storyboard.TargetName="progressBar" 
                            Storyboard.TargetProperty="Value"
                             From="0" To="100" Duration="0:0:5"  />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </ProgressBar.Triggers>
        </ProgressBar>
    </DockPanel>
</Window>
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 ProgressBarDemo
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

        }

        private void OnValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            foreach (var item in ((sender as ProgressBar).Parent as DockPanel).Children)
            {
                if (item is TextBlock) (item as TextBlock).Text = (sender as ProgressBar).Value.ToString();
            }            
        }
    }
}

C#范例

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.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace ProgressBarDemo
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();


            DockPanel dockPanel = new DockPanel();
            TextBlock textBlock = new TextBlock();
            dockPanel.Children.Add(textBlock);
            DockPanel.SetDock(textBlock, Dock.Top);
            ProgressBar progressBar = new ProgressBar
            {
                Height = 20,
                VerticalAlignment = VerticalAlignment.Bottom,
                IsIndeterminate = false,
                Minimum = 1,
                Maximum = 100,
                Orientation = Orientation.Horizontal,
                Value = 1
            };
            progressBar.ValueChanged += OnValueChanged;
            dockPanel.Children.Add(progressBar);
            DockPanel.SetDock(progressBar, Dock.Bottom);
            this.Content = dockPanel;

            Duration duration = new Duration(TimeSpan.FromSeconds(5));
            DoubleAnimation doubleanimation = new DoubleAnimation(100.0, duration);
            progressBar.BeginAnimation(ProgressBar.ValueProperty, doubleanimation);
        }

            private void OnValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            foreach (var item in ((sender as ProgressBar).Parent as DockPanel).Children)
            {
                if (item is TextBlock) (item as TextBlock).Text = (sender as ProgressBar).Value.ToString();
            }            
        }
    }
} 
<Window
    x:Class="ProgressBarDemo.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:local="clr-namespace:ProgressBarDemo"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
</Window>

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值