等待控件 / 使用 WPF 的 IE 7 进度条控件
使用 WPF 的永恒或非基于进度的等待/进度控件
引言
本文介绍了在 WPF 中实现等待控件的完整代码和实现。
下载 WaitingControl.zip - 302.64 KB
背景
使用沙漏显示忙碌状态的时代已经过去,我们生活在 WPF 的时代。 我想实现一个类似于 IE 7 中的进度条的 UI。 当我们无法估算进度时,这特别有用。 例如)从数据库中提取数据的搜索页面永远无法估计结果会在 1 秒或 10 秒内返回。
我谷歌搜索了很多,希望得到一些帮助。 但我的努力都白费了,最后我决定自己构建一个。 我相信这段代码应该能帮助一些开发人员。
使用代码
代码很简单,它有两个用渐变色填充的圆圈,以及一个无限运行的故事板,除非停止。 你可以根据需要更改颜色、渐变等。
随附的项目包含一个控件库(控件本身)和一个实现该控件的示例应用程序。
<UserControl.Resources> <Storyboard x:Key="Spin" x:Name="Spin"> <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" RepeatBehavior="Forever" Storyboard.TargetName="path" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)"> <SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/> <SplineDoubleKeyFrame KeyTime="00:00:00.7000000" Value="360"/> </DoubleAnimationUsingKeyFrames> </Storyboard> </UserControl.Resources>
上述故事板以 0.7 秒的速度将甜甜圈形状的控件旋转 360°,并永远重复该动画。
<Path.Fill> <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> <GradientStop Color="#FF000000" Offset="0"/> <GradientStop Color="#FFC5D1F9" Offset="1"/> </LinearGradientBrush> </Path.Fill>
如果您想更改颜色,上述 XAML 应该是您感兴趣的部分。 我建议使用 Microsoft Expression Blends 进行此操作。
为控件实现了 13 个路由事件,这些事件触发 4 个操作,即开始、结束、暂停、恢复。 State 属性给出了控件的状态。
ThrowsErrorOnInvalidOperation 属性获取/设置是否要引发无效操作错误,例如)除非控件已暂停,否则恢复操作无效。
关注点
在实现路由事件之前,我遇到了很多麻烦。 我认为这个项目应该是在“在您的控件中实现路由事件”方面学习的完美之选。
如果您在此方面需要任何支持,请随时写信给我。 如果这段代码有用,我也希望听到您的反馈。
历史
版本 1.0.0.0:发布带有开始、结束方法的控件及其事件
版本 2.0.0.0
- 发布带有开始、结束、暂停、恢复方法和相应事件的控件。
- State 属性已实现。
- 引入了无效操作错误。
版本 2.1.0.0
- 修复了新添加方法中的错误。
- 根据 Microsoft 标准更改了事件名称。
- 添加了 ThrowsErrorOnInvalidOperation 属性。
下载 WaitingControl.zip - 302.64 KB