65.9K
CodeProject 正在变化。 阅读更多。
Home

等待控件 / 使用 WPF 的 IE 7 进度条控件

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.22/5 (8投票s)

2008年5月5日

CPOL

2分钟阅读

viewsIcon

45567

downloadIcon

902

使用 WPF 的永恒或非基于进度的等待/进度控件

引言

本文介绍了在 WPF 中实现等待控件的完整代码和实现。

waiting2.png

下载 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

© . All rights reserved.