使用WPF實(shí)現(xiàn)加載動畫效果
前言
當(dāng)我們在開發(fā)應(yīng)用程序時,用戶體驗(yàn)往往是至關(guān)重要的一環(huán)。在應(yīng)用程序加載大量數(shù)據(jù)或執(zhí)行復(fù)雜操作時,為用戶提供一個良好的加載體驗(yàn)變得至關(guān)重要。加載動畫是其中一個有效的方式,它不僅能夠告知用戶應(yīng)用程序正在進(jìn)行工作,還能夠緩解用戶在等待過程中的焦慮感。
一、需求分析
開發(fā)一個加載動畫比較常見的做法一般有以下兩種。
一種是直接在控件的上層添加一層半透明遮罩,在遮罩上面顯示加載動畫,需要顯示加載效果的時候?qū)⑦@個遮罩顯示出來,加載完成以后隱藏這個遮罩,這種方式雖然也能實(shí)現(xiàn)需求,但是缺點(diǎn)也很明顯,每次要使用加載效果的時候都需要單獨(dú)添加遮罩代碼,單獨(dú)寫控制顯示和隱藏的代碼,一個項(xiàng)目頁面那么多,每次都這樣整,那不得把人整崩潰了。
還有一種實(shí)現(xiàn)方式是開發(fā)一個控件,在這個控件當(dāng)中實(shí)現(xiàn)遮罩的效果,然后用這個控件把頁面內(nèi)容包起來,這樣直接控制這個控件的屬性就能實(shí)現(xiàn)遮罩效果,這也是很多第三方控件庫的實(shí)現(xiàn)方式。這種方式在易用性上雖然有所提升,但是還是有上面的問題,每個要用的地方都得Copy一次代碼。
今天我們這里使用第三種方式,那就是使用裝飾器來實(shí)現(xiàn)這個功能,它的優(yōu)點(diǎn)就是對源代碼侵入很小,不用每次使用都Copy大段代碼,并且可擴(kuò)展性非常強(qiáng)。
二、基本用法
以下為示例代碼,當(dāng)ViewModel中的IsLoading屬性值為True時,就會觸發(fā)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); } } } }
運(yùn)行效果:
三、高級用法
3.1 FrameworkElementExtension.IsLoading只能在Grid上使用嗎?
答:No,幾乎所有控件都可以使用,Window、Page、UserControl、Panel、Button、Rectangle、Path、TextBox等等,都沒問題,只需要將IsLoading設(shè)置為True,就會出現(xiàn)Loading效果。
3.2 我覺得加載動畫不好看,有沒有辦法換成其它的?
答:當(dāng)然可以,除了默認(rèn)加載效果以外,還可以添加任意你喜歡的效果,不管它是文字、動畫、視頻、gif圖片還是其它的東西,通通都可以,并且操作非常簡單,一共有兩種方式。
方式一:統(tǒng)一添加的方式
只需在Resources中添加一個名為MaskContent的資源,在觸發(fā)加載遮罩顯示的時候就會自動讀取該資源作為動畫元素,如果放在App.Resources中,整個項(xiàng)目所有加載效果都使用該資源,如果放在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>
添加進(jìn)度條控件
<Window.Resources> <ProgressBar x:Key="MaskContent" Width="150" Height="15" HorizontalAlignment="Center" VerticalAlignment="Center" IsIndeterminate="True" /> </Window.Resources>
方式二:單獨(dú)添加的方式
<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>
四、綜合案例
到此這篇關(guān)于使用WPF實(shí)現(xiàn)加載動畫效果的文章就介紹到這了,更多相關(guān)WPF加載動畫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入淺出掌握Unity ShaderLab語法基礎(chǔ)
Unity中所有Shader文件都通過一種陳述性語言進(jìn)行描述,稱為“ShaderLab”, 這篇文章主要介紹了Unity圖形學(xué)之ShaderLab入門基礎(chǔ),需要的朋友可以參考下2023-05-05Unity實(shí)現(xiàn)文本轉(zhuǎn)貼圖
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)文本轉(zhuǎn)貼圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-05-05C# 反射與 Quartz 實(shí)現(xiàn)流程處理詳情
根據(jù)要實(shí)現(xiàn)流程處理,比如用戶可以定義一個定時任務(wù),每周一查看報表。任務(wù)是用Quartz可實(shí)現(xiàn),但用戶自己選擇報表就比較麻煩,這時因?yàn)橄到y(tǒng)的不同模塊的生成報表的函數(shù)不同,這時便可以傳入一個方法名和方法的輸入?yún)?shù),就可以調(diào)用該方法。下面小編我為大家介紹具體過程2021-09-09C#實(shí)現(xiàn)鼠標(biāo)左右鍵切換效果
這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)鼠標(biāo)左右鍵切換功能,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12C#中實(shí)現(xiàn)一次執(zhí)行多條帶GO的sql語句實(shí)例
這篇文章主要介紹了C#中實(shí)現(xiàn)一次執(zhí)行多條帶GO的sql語句,以實(shí)例形式較為詳細(xì)的分析了C#執(zhí)行sql語句的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09