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 自定义现有控件的外观一文的更改控件的视觉结构部分可以找到视觉属性列表。
名称 | 备注 | 权限 |
---|---|---|
标识 IsIndeterminate 依赖项属性。 | public static readonly | |
标识 Orientation 依赖项属性。 | public static readonly |
名称 | 备注 | 权限 |
---|---|---|
获取或设置 ProgressBar 是显示实际值,还是显示一般的连续进度反馈。 | get; set; | |
获取或设置 ProgressBar 的方向:水平或垂直。 | get; set; |
名称 | 备注 | 权限 |
---|---|---|
在将模板应用于 ProgressBar 时调用。 | public | |
提供 ProgressBarAutomationPeer 此控件的适当实现,作为 WPF 自动化基础结构的一部分。 | protected | |
当 Maximum 属性更改时,更新 ProgressBar 的当前位置。 | protected | |
当 Minimum 属性更改时,更新 ProgressBar 的当前位置。 | protected | |
当 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 |
名称 | 备注 | 权限 |
---|---|---|
获取或设置要从 Value 控件的 RangeBase 加上或减去的值。 | get; set; | |
获取或设置范围元素的最大可能的 Value。 | get; set; | |
获取或设置范围元素的 Minimum 可能的 Value。 | get; set; | |
获取或设置要从 Value 控件的 Value 加上或减去的 RangeBase。 | get; set; | |
获取或设置范围控件的当前数量。 | get; set; |
名称 | 备注 | 权限 |
---|---|---|
当 Maximum 属性更改时调用。 | protected | |
当 Minimum 属性更改时调用。 | protected | |
引发 ValueChanged 路由事件。 | protected | |
提供 RangeBase 对象的字符串表示形式。 | public |
名称 | 备注 |
---|---|
在范围值改变时发生。 |
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>