详解WPF如何在基础控件上显示Loading等待动画

 更新时间:2023年04月13日 11:42:38   作者:WPF开发者  
这篇文章主要为大家详细介绍了WPF如何在基础控件上显示Loading等待动画的效果,文中的示例代码讲解详细,具有一定的学习价值,需要的可以参考一下

WPF 如何在基础控件上显示 Loading 等待动画

  • 框架使用.NET4 至 .NET6
  • Visual Studio 2022;
  • 使用方式需引入命名空间后设置控件的附加属性 wd:Loading.IsShow="true",即可显示默认等待动画效果如下:

  • 如需自定义 Loading 一定要 先设置 wd:Loading.Child 在设置 IsShow="true" 。
  • 显示不同 Loading 内容需 wd:Loading.Child ={x:Static wd:NormalLoading.Default} 进行复赋值显示 NormalLoading 效果如下:

实现代码

1)创建 BasicControlsExample.xaml 代码如下:

<UserControl x:Class="WPFDevelopers.Samples.ExampleViews.BasicControlsExample"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:WPFDevelopers.Samples.ExampleViews"
             xmlns:wpfdev="https://github.com/WPFDevelopersOrg/WPFDevelopers"
             xmlns:controls="clr-namespace:WPFDevelopers.Samples.Controls"
             mc:Ignorable="d"  Background="{DynamicResource BackgroundSolidColorBrush}"
             d:DesignHeight="450" d:DesignWidth="800" Name="MyBasicControls">
<TextBlock Text="Loading" FontSize="20" Margin="0,20,0,0"/>
                    <WrapPanel Margin="0,10">
                        <Button Content="Loading" Click="Loading_Click" 
                            Style="{DynamicResource PrimaryButton}"/>
                        <Button Name="btnLoadingTask" Content="LoadingTask" Click="LoadingTask_Click" 
                                Style="{DynamicResource SuccessPrimaryButton}" Margin="10,0"/>
                        <Button Name="btnLoading" Click="BtnLoading_Click" Content="AddLoading"
                                wpfdev:Loading.Child="{x:Static wpfdev:NormalLoading.Default}"
                                Style="{DynamicResource WarningPrimaryButton}"/>
                        <Button Name="btnOffTask" Click="BtnOffTask_Click" 
                                Margin="10,0" Content="Off Task"
                                Style="{DynamicResource DangerPrimaryButton}"/>
                    </WrapPanel>
  </UserControl>

2)逻辑 BasicControlsExample.xaml.cs 代码如下:

对控件进行等待动画。

  private void Loading_Click(object sender, RoutedEventArgs e)
      {
          var task = new Task(() => { Thread.Sleep(5000); });
          task.ContinueWith(previousTask => 
          {
              Loading.SetIsShow(MyBasicControls, false);
          }, 
          TaskScheduler.FromCurrentSynchronizationContext());
          Loading.SetIsShow(MyBasicControls, true);
          task.Start();
      }

基础控件上添加等待动画。

private void BtnLoading_Click(object sender, RoutedEventArgs e)
        {
            var task = new Task(() => { Thread.Sleep(5000); });
            task.ContinueWith(previousTask => { Loading.SetIsShow(btnLoading, false); }, TaskScheduler.FromCurrentSynchronizationContext());
            Loading.SetIsShow(btnLoading, true);
            task.Start();
        }

关闭基础控件的等待动画。

 private void BtnOffTask_Click(object sender, RoutedEventArgs e)
        {
            if (tokenSource == null) return;
            tokenSource.Cancel();
            Loading.SetIsShow(btnLoadingTask, false);
        }
        private CancellationTokenSource tokenSource;

        private void LoadingTask_Click(object sender, RoutedEventArgs e)
        {
            tokenSource = new CancellationTokenSource();
            var cancellationToken = tokenSource.Token;

            var task = new Task(() =>
            {
                for (int i = 0; i < 10; i++)
                {
                    //这里做自己的事情
                    if (tokenSource.IsCancellationRequested)
                        return;
                    Thread.Sleep(1000);
                }
            }, cancellationToken);
            task.ContinueWith(previousTask =>
            {
                if (tokenSource.IsCancellationRequested)
                    return;
                Loading.SetIsShow(btnLoadingTask, false);
            }, TaskScheduler.FromCurrentSynchronizationContext());
            Loading.SetIsShow(btnLoadingTask, true);
            task.Start();
        }

效果图

到此这篇关于详解WPF如何在基础控件上显示Loading等待动画的文章就介绍到这了,更多相关WPF基础控件显示Loading等待动画内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Unity存储游戏数据的多种方法小结

    Unity存储游戏数据的多种方法小结

    这篇文章主要介绍了Unity存储游戏数据的几种方法,在游戏开发中,存储游戏数据是非常重要的,因为游戏数据决定了游戏的各个方面,例如游戏的进度、玩家的成就、游戏的设置,需要的朋友可以参考下
    2023-02-02
  • C#编程高并发的几种处理方法详解

    C#编程高并发的几种处理方法详解

    这篇文章主要为大家详细介绍了C#编程高并发的几种处理方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • C#数据结构与算法揭秘二

    C#数据结构与算法揭秘二

    上文对数据结构与算法,有了一个简单的概述与介绍,这篇文章,我们介绍一中典型数据结构——线性结构
    2012-10-10
  • C# WPF编程之Application类的使用详解

    C# WPF编程之Application类的使用详解

    每个运行中的WPF应用程序都由System.Windows.Application类的一个实例来表示,该类跟踪在应用程序中打开的所有窗口,决定何时关闭应用程序,下面就跟随小编一起来深入了解下Application类的使用吧
    2024-04-04
  • C#Js时间格式化问题简单实例

    C#Js时间格式化问题简单实例

    这篇文章介绍了C#Js时间格式化问题简单实例,有需要的朋友可以参考一下
    2013-10-10
  • 利用C#实现分割GIF图片

    利用C#实现分割GIF图片

    这篇文章主要为大家详细介绍了如何利用C#实现分割GIF图片的功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以了解一下
    2022-12-12
  • C#中csv文件与DataTable互相导入处理实例解析

    C#中csv文件与DataTable互相导入处理实例解析

    这篇文章主要介绍了C#中csv文件与DataTable互相导入处理实例解析,非常实用的功能,需要的朋友可以参考下
    2014-08-08
  • C#推送信息到APNs的方法

    C#推送信息到APNs的方法

    这篇文章主要介绍了C#推送信息到APNs的方法,涉及C#推送通知到苹果APNs的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-05-05
  • C#使用Dll的几种方法示例

    C#使用Dll的几种方法示例

    使用 DLL(动态链接库)是 C# 开发中常见的任务之一,DLL 文件包含可以在运行时加载的代码和数据,允许程序共享功能和资源,降低程序的内存占用并促进代码的复用,本篇文章将深入探讨 C# 中使用 DLL 的多种方法,并提供相关代码示例,需要的朋友可以参考下
    2024-10-10
  • C#缓存之SqlCacheDependency用法实例总结

    C#缓存之SqlCacheDependency用法实例总结

    这篇文章主要介绍了C#缓存之SqlCacheDependency用法,在C#程序设计中有一定的实用价值,需要的朋友可以参考下
    2014-08-08

最新评论