在 ListView 顶部添加“正在加载”图像

2024-01-10

我想添加一个“正在加载”-Image在我的顶部ListView当所有项目都在加载时,如果有很多项目正在加载,我仍然希望有一个良好的用户体验。

所以我想要一个浮动的Image(动画 GIF?)在我的上面ListView.

如何解决这个问题?一旦有了浮动图像或控件,如何使 GIF 动画化?


下面是我用来为 WPF 创建类似 AJAX 的等待微调器的一些 XAML。我使用几何和动画而不是动画 GIF,您可以通过调整 XAML 来控制大小和速率:

<!-- Style for AJAX-like wait spinners -->
<Style x:Key="WaitSpinnerStyle" TargetType="Control">
    <Setter Property="Foreground" Value="#888" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Control">
                <Viewbox Visibility="{TemplateBinding Visibility}">
                    <Canvas RenderTransformOrigin="0.5,0.5" Width="120" Height="120" >
                        <Ellipse Width="21.835" Height="21.862" Canvas.Left="20.1696" Canvas.Top="9.76358" Stretch="Fill" Fill="{TemplateBinding Foreground}" Opacity="1.0"/>
                        <Ellipse Width="20.835" Height="20.862" Canvas.Left="2.86816" Canvas.Top="29.9581" Stretch="Fill" Fill="{TemplateBinding Foreground}" Opacity="0.9"/>
                        <Ellipse Width="19.835" Height="19.862" Canvas.Left="0.00001" Canvas.Top="57.9341" Stretch="Fill" Fill="{TemplateBinding Foreground}" Opacity="0.8"/>
                        <Ellipse Width="17.835" Height="17.862" Canvas.Left="12.1203" Canvas.Top="83.3163" Stretch="Fill" Fill="{TemplateBinding Foreground}" Opacity="0.7"/>
                        <Ellipse Width="16.835" Height="16.862" Canvas.Left="36.5459" Canvas.Top="98.1380" Stretch="Fill" Fill="{TemplateBinding Foreground}" Opacity="0.6"/>
                        <Ellipse Width="14.835" Height="14.862" Canvas.Left="64.6723" Canvas.Top="96.8411" Stretch="Fill" Fill="{TemplateBinding Foreground}" Opacity="0.5"/>
                        <Ellipse Width="13.835" Height="13.862" Canvas.Left="87.6176" Canvas.Top="81.2783" Stretch="Fill" Fill="{TemplateBinding Foreground}" Opacity="0.4"/>
                        <Ellipse Width="12.835" Height="12.862" Canvas.Left="98.165"  Canvas.Top="54.4140" Stretch="Fill" Fill="{TemplateBinding Foreground}" Opacity="0.3"/>
                        <Ellipse Width="11.835" Height="11.862" Canvas.Left="92.9838" Canvas.Top="26.9938" Stretch="Fill" Fill="{TemplateBinding Foreground}" Opacity="0.2"/>
                        <Canvas.RenderTransform>
                            <RotateTransform x:Name="SpinnerRotate" Angle="0" />
                        </Canvas.RenderTransform>
                        <Canvas.Triggers>
                            <EventTrigger RoutedEvent="ContentControl.Loaded">
                                <BeginStoryboard>
                                    <Storyboard>
                                        <DoubleAnimation
                                            Storyboard.TargetName="SpinnerRotate"
                                            Storyboard.TargetProperty="Angle"
                                            From="0" To="360" Duration="0:0:01.3"
                                            RepeatBehavior="Forever" />
                                    </Storyboard>
                                </BeginStoryboard>
                            </EventTrigger>
                        </Canvas.Triggers>
                    </Canvas>
                </Viewbox>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

你可以像这样使用它(如果你想改变它,请指定颜色):

<Control Style="{StaticResource WaitSpinnerStyle}" Width="35" />
<Control Style="{StaticResource WaitSpinnerStyle}" Width="35" Foreground="Green" />

上面的 XAML 看起来像这样(你必须想象它们在旋转!):


要让一个图层出现在列表框上方,请将其包裹在网格中,如下所示:

<Grid>
    <!-- LOADING overlay (for async-load) -->
    <Border HorizontalAlignment="Stretch" VerticalAlignment="Stretch" IsHitTestVisible="True" 
            Background="#40000000" CornerRadius="4"
            Visibility="{Binding Path=IsLoading, Converter={StaticResource BooleanToVisibilityConverter}}">
        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
            <Control Style="{StaticResource WaitSpinnerStyle}" Width="35" Foreground="White" />
            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="LOADING..." FontWeight="Bold" Margin="0,5" Foreground="White" FontSize="12" />
        </StackPanel>
    </Border>
    <ListBox />
</Grid>

使用网格意味着边框将出现在列表框的顶部。在这种情况下,该层将显示为灰色,并会窃取任何鼠标操作,从而有效地禁用底层列表框。

注意这里的绑定是IsLoaded连接到我的视图模型。我将其设置为false当我开始加载时,然后再次加载true当加载完成时。请注意,我从调度程序线程(在工作线程上)加载我的项目,以便在我执行此工作时 UI 更新。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 ListView 顶部添加“正在加载”图像 的相关文章

随机推荐

  • 《使用 Rails 进行敏捷 Web 开发》一书:CSS 未应用

    我刚刚通过阅读著名的实用书架书籍 Agile Web Development with Rails 开始深入 Rails 的世界 到目前为止 我确实遵循了所有示例 但现在我被困在第 85 页 pdf 版本 其中应该将自定义 CSS 添加到项
  • XSLT - 从 URL 获取文件名

    我需要从 URL 获取文件名 URL 是动态的 并且斜杠的数量可以是不同的数量 我使用 xslt 1 0 所以寻找需要的东西 http DevSite sites name Lists note Attachments 3 image jp
  • 访问 NODE_ENV 在前端代码中有意义吗?

    我有一个正在部署的反应 节点应用程序 其中一个组件尝试访问 NODE ENV 以确定要使用的主机 URL localhost 或 heroku 我现在意识到 即使 NODE ENV 被设置为生产环境 它在浏览器上下文中始终是 未定义 的 因
  • Visual Studio 2017 ASP.NET MVC 核心模板中的 Bower 替换

    最近 我使用 Visual Studio 2017 15 6 3 从头开始 创建了一个 ASP NET MVC Core 项目 我发现了常用的 JavaScript 框架 引导程序 jquery jquery 验证 jquery 验证 不显
  • 最好使用私有方法还是受保护方法?

    在我的许多 PHP 项目中 我最终得到的类具有我不打算扩展的非公共函数 最好将它们声明为受保护的还是私有的 我可以从两种角度看待争论 将它们设为私有是一种更为保守的方法 但可以说 如果我希望扩展该方法 并且它清楚地表明哪些方法是由基类扩展的
  • 在 Rhino 中作为 JavaScript 对象访问 java 地图和列表

    有没有办法在 Rhino 中以 JavaScript 对象的形式访问 Java 地图和列表 我有一个 Map 其中仅包含其他映射以及基元和字符串列表 我想将其传递给 Rhino 脚本并对其执行操作 并将修改后的对象返回到 Java 但因为它
  • 具有多个国家/地区代码顶级域名 (ccTLD) 的 Facebook 应用

    假设我们有一个通过以下域提供服务的 Web 应用程序 www something com www something co uk www something de 我想知道是否有一种方法可以验证用户的 Facebook 帐户 从这些不同的域
  • 从开始日期到结束日期的每个日期的行

    我想做的是记录如下所示 Start DT End DT ID 4 5 2013 4 9 2013 1 并将其更改为如下所示 DT ID 4 5 2013 1 4 6 2013 1 4 7 2013 1 4 8 2013 1 4 9 2013
  • Heroku 上的自定义根域

    我有一个域 example com 我想将其用于位于 example herokuapp com 的 Rails 应用程序 但我很困惑如何执行此操作 赫罗库 说 https devcenter heroku com articles cus
  • 如何使用 jQuery 通过命名空间进行 XML 解析

    我是 jQuery 新手 想解析 XML 文档 我能够使用默认命名空间解析常规 XML 但使用 XML 例如
  • 数据库转储到文本文件,对“行已完成”有副作用

    我试图让一个函数从 select 语句将数据库 sql 转储写入文本文件 返回的量可能非常大 我有兴趣尽快完成此操作 对于大型结果集 我还需要记录每个 x 间隔写入的总行数以及自上一个 x 间隔以来每秒写入的行数 我有一个 map 实际上在
  • 如何将 Spider 搜索添加到我的网站? “无法连接到数据库”

    我下载了蜘蛛搜索引擎 http www sphider eu 我目前正在尝试通过本地主机运行它 我将其提取到根文件夹中 并用 HTML 创建了一个搜索栏 div div
  • 如何指示 SharePoint 场在特定服务器上运行计时器作业?

    我们有一个 SP 计时器作业 运行良好一段时间 最近 管理员在场中加入了另一台服务器 因此 SharePoint 决定开始在此另一台服务器上运行此计时器作业 问题是服务器上没有安装所有依赖项 即 Oracle 因此作业失败 我只是在这里寻找
  • NumPy 数组中元素的索引[重复]

    这个问题在这里已经有答案了 在Python中 我们可以使用以下方法获取数组中值的索引 index 但是对于 NumPy 数组 当我尝试执行以下操作时 decoding index i I get AttributeError numpy n
  • 使用 Java 在网页上查找链接

    使用Java将网页的源代码存储在字符串中 我想提取源代码中的所有url并输出它们 我对正则表达式之类的东西很糟糕 甚至不知道如何解决这个问题 任何帮助将不胜感激 不要使用正则表达式 https stackoverflow com quest
  • 将 jLabel 移动到 jPanel 中的不同位置(类似 Pacman 的游戏)

    我正在制作像吃豆人这样的游戏 到目前为止我才刚刚从网格开始 我启动了网格 但我需要弄清楚如何将某些内容移动到网格中的不同位置 以便当用户单击或我的幽灵移动时 它将显示在屏幕上 我怎样才能让它动起来 我尝试了很多不同的方法 但没有一个对我有用
  • 安装 RavenDb Embedded 时出现 Nuget 依赖错误

    我正在尝试在 ASP NET MVC 5 应用程序中安装 RavenDB Embedded 但出现以下依赖项错误 PM gt Install Package RavenDB Embedded Attempting to resolve de
  • 由于缺少服务结构包,不会添加依赖项

    启动一个新的空 NET Core 2 类库 我尝试使用 nuget 添加任何依赖项 但出现此错误 错误本地源 C Program Files Microsoft SDKs Service Fabric packages 不存在 但服务结构应
  • 在嵌套模型轨道中传递数组隐藏字段

    我认为有以下代码 参数在控制台中传递 Parameters authenticity token gt LJ ZME2lHZ7VwCDgPKX6OFe326fXSXo5UB4M0cPwbCE esthour gt rfp id gt 6 e
  • 在 ListView 顶部添加“正在加载”图像

    我想添加一个 正在加载 Image在我的顶部ListView当所有项目都在加载时 如果有很多项目正在加载 我仍然希望有一个良好的用户体验 所以我想要一个浮动的Image 动画 GIF 在我的上面ListView 如何解决这个问题 一旦有了浮