使用WPF实现加载动画效果

 更新时间:2024年03月29日 09:57:22   作者:趋时软件  
在应用程序加载大量数据或执行复杂操作时,为用户提供一个良好的加载体验变得至关重要,加载动画是其中一个有效的方式,下面我们就来看看如何使用WPF实现简单的加载动画效果吧
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

前言

当我们在开发应用程序时,用户体验往往是至关重要的一环。在应用程序加载大量数据或执行复杂操作时,为用户提供一个良好的加载体验变得至关重要。加载动画是其中一个有效的方式,它不仅能够告知用户应用程序正在进行工作,还能够缓解用户在等待过程中的焦虑感。

一、需求分析

开发一个加载动画比较常见的做法一般有以下两种。

一种是直接在控件的上层添加一层半透明遮罩,在遮罩上面显示加载动画,需要显示加载效果的时候将这个遮罩显示出来,加载完成以后隐藏这个遮罩,这种方式虽然也能实现需求,但是缺点也很明显,每次要使用加载效果的时候都需要单独添加遮罩代码,单独写控制显示和隐藏的代码,一个项目页面那么多,每次都这样整,那不得把人整崩溃了。

还有一种实现方式是开发一个控件,在这个控件当中实现遮罩的效果,然后用这个控件把页面内容包起来,这样直接控制这个控件的属性就能实现遮罩效果,这也是很多第三方控件库的实现方式。这种方式在易用性上虽然有所提升,但是还是有上面的问题,每个要用的地方都得Copy一次代码。

今天我们这里使用第三种方式,那就是使用装饰器来实现这个功能,它的优点就是对源代码侵入很小,不用每次使用都Copy大段代码,并且可扩展性非常强。

二、基本用法

以下为示例代码,当ViewModel中的IsLoading属性值为True时,就会触发Loading动画。

View代码:

<Window
    x:Class="LoadingDemo.Views.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:extensions="clr-namespace:LoadingDemo.Extensions"
    xmlns:prism="http://prismlibrary.com/"
    Title="Loading测试"
    Width="1366"
    Height="768"
    prism:ViewModelLocator.AutoWireViewModel="True"
    FontSize="22"
    WindowStartupLocation="CenterScreen">
    <Grid extensions:FrameworkElementExtension.IsLoading="{Binding IsLoading}">
        
    </Grid>
</Window>

ViewModel代码:

namespace LoadingDemo.ViewModels
{
    public class MainWindowViewModel : BindableBase
    {
        private bool _isLoading = false;
        public bool IsLoading
        {
            get { return _isLoading; }
            set { this.SetProperty(ref _isLoading, value); }
        }
    }
}

运行效果:

三、高级用法

3.1 FrameworkElementExtension.IsLoading只能在Grid上使用吗?

答:No,几乎所有控件都可以使用,Window、Page、UserControl、Panel、Button、Rectangle、Path、TextBox等等,都没问题,只需要将IsLoading设置为True,就会出现Loading效果。

3.2 我觉得加载动画不好看,有没有办法换成其它的?

答:当然可以,除了默认加载效果以外,还可以添加任意你喜欢的效果,不管它是文字、动画、视频、gif图片还是其它的东西,通通都可以,并且操作非常简单,一共有两种方式。

方式一:统一添加的方式

只需在Resources中添加一个名为MaskContent的资源,在触发加载遮罩显示的时候就会自动读取该资源作为动画元素,如果放在App.Resources中,整个项目所有加载效果都使用该资源,如果放在Window.Resources中,Window中的所有加载效果都使用该资源,以此类推。以下都是合法的代码。

添加自定义动画效果(用户控件)

<Window.Resources>
    <controls:CustomLoading x:Key="MaskContent" Width="35" Height="35" />
</Window.Resources>

添加文字

<Window.Resources>
    <TextBlock x:Key="MaskContent" Text="加载中..." HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="22" FontWeight="Bold" Foreground="White" />
</Window.Resources>

添加进度条控件

<Window.Resources>
    <ProgressBar x:Key="MaskContent" Width="150" Height="15" HorizontalAlignment="Center" VerticalAlignment="Center" IsIndeterminate="True" />
</Window.Resources>

方式二:单独添加的方式

<Grid extensions:FrameworkElementExtension.IsLoading="{Binding IsLoading}">
    <extensions:FrameworkElementExtension.MaskContent>
        <TextBlock Text="加载中..." HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="22" FontWeight="Bold" Foreground="White"/>
    </extensions:FrameworkElementExtension.MaskContent>
</Grid>

四、综合案例

到此这篇关于使用WPF实现加载动画效果的文章就介绍到这了,更多相关WPF加载动画内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • C#?压榨cpu的办法(推荐)

    C#?压榨cpu的办法(推荐)

    这篇文章主要介绍了C#?压榨cpu的办法,通过修改num的值,观察cpu的核数,例如我电脑是8核的,改成8,运行时各个核都能跑满,感兴趣的朋友跟随小编一起看看吧
    2021-12-12
  • WPF自定义控件和样式之自定义按钮(Button)

    WPF自定义控件和样式之自定义按钮(Button)

    接触WPF也有两个多月了,有了一定的理论基础和项目经验,现在打算写一个系列,做出来一个WPF的控件库。下面这篇文章主要给大家介绍了关于WPF自定义控件和样式之自定义按钮(Button)的相关资料,需要的朋友可以参考下。
    2018-04-04
  • WPF实现半圆形导航菜单

    WPF实现半圆形导航菜单

    这篇文章主要为大家详细介绍了WPF实现半圆形导航菜单,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • C#使用NPOI进行Excel和Word文件处理

    C#使用NPOI进行Excel和Word文件处理

    NPOI是一个基于.NET的API,用于读写微软的OLE?2?Compound?Document?formats,如Microsoft?Office?Excel和Word,下面就跟随小编一起来看看它的具体操作吧
    2024-03-03
  • C#编程实现简易图片浏览器的方法

    C#编程实现简易图片浏览器的方法

    这篇文章主要介绍了C#编程实现简易图片浏览器的方法,涉及C#基于WinForm操作图片实现预览功能的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • 巧用Dictionary实现日志数据批量插入

    巧用Dictionary实现日志数据批量插入

    这篇文章主要介绍了巧用Dictionary实现日志数据批量插入,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • WinForm自定义控件应用实例

    WinForm自定义控件应用实例

    这篇文章主要介绍了WinForm自定义控件应用实例,非常实用的功能,需要的朋友可以参考下
    2014-08-08
  • C#创建windows系统用户的方法

    C#创建windows系统用户的方法

    这篇文章主要介绍了C#创建windows系统用户的方法,涉及C#操作用户名、密码、显示名称、描述、是否强制修改密码、密码是否过期等技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • C# 7.0 使用下划线忽略使用的变量的原因分析

    C# 7.0 使用下划线忽略使用的变量的原因分析

    这篇文章主要介绍了C# 7.0 使用下划线忽略使用的变量的原因浅析,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-10-10
  • C# TreeView无限目录树实现方法

    C# TreeView无限目录树实现方法

    这篇文章主要介绍了C# TreeView无限目录树实现方法,实例分析了TreeView节点操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06

最新评论


http://www.vxiaotou.com