Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【荐】牛逼的WPF动画库:XamlFlair

【荐】牛逼的WPF动画库:XamlFlair

作者头像
沙漠尽头的狼
发布于 2021-12-01 08:15:23
发布于 2021-12-01 08:15:23
2.1K00
代码可运行
举报
文章被收录于专栏:Dotnet9Dotnet9
运行总次数:0
代码可运行

【荐】牛逼的WPF动画库:XamlFlair

XamlFlair

XamlFlair库的目标是简化常见动画的实现,并允许开发人员使用几行Xaml轻松地添加单个或组合的动画集。

展示

Sekuence Puzzle Game[1]

支持作者

如果你想用一些咖啡来支持我的工作,你可以在这里做:给我买杯咖啡[2]。你的帮助让我有动力继续花时间在这个项目上,并继续维护和更新它的新功能。提前谢谢!

内容

  • Install from Nuget[3]
  • Features Overview[4]
  • Basic Concepts[5]
  • Usage[6]
  • Base Animation Types[7]
  • Color Animations (*WPF And Uno Only*)[8]
  • Overriding the Global Default Values[9]
  • Using a `ResourceDictionary` for Base Settings[10]
  • Default Animations (*WPF Only*)[11]
  • `TransformOn` Property (*WPF Only*)[12]
  • Perspective Rotations (*UWP Only*)[13]
  • Combining Animations[14]
  • Overriding Values[15]
  • Relative Translations on X and Y Axes[16]
  • Compound Animations[17]
  • Repeating Animations[18]
  • Events and Bindings[19]
  • Primary and Secondary Completion Commands[20]
  • Using the `StartWith` Property[21]
  • Using the `AllowOpacityReset` Property (*WPF Only*)[22]
  • Using the `ClipToBounds` Property (*UWP And Uno Only*)[23]
  • Debugging Animations[24]
  • Logging Animations[25]
  • `ListViewBase` (_UWP and Uno_) and `ListBox`-based (_WPF_) Animations[26]

Nuget中下载

Platform

Package

NuGet

UWP

[XamlFlair.UWP][UWPNuGet]

[![UWPNuGetShield]][UWPNuGet]

WPF

[XamlFlair.WPF][WPFNuGet]

[![WPFNuGetShield]][WPFNuGet]

Uno

[XamlFlair.Uno][UNONuGet]

[![UNONuGetShield]][UNONuGet]

使用以下命令从Package Manager Console下载XamlFlair:

UWP:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Install-Package XamlFlair.UWP

您的应用程序必须至少针对Windows 10版本1809(内部版本17763)

WPF:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Install-Package XamlFlair.WPF

Uno:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Install-Package XamlFlair.Uno

您的UWP应用程序必须至少针对Windows 10版本1809(构建18362)

功能概述(Features Overview)

Feature

UWP

WPF

UWP (Uno)

iOS (Uno)

Android (Uno)

Wasm (Uno) EXPERIMENTAL

Animation System

Composition

Storyboards

Storyboards

Storyboards

Storyboards

Storyboards

Transform Type

N/A

TransformGroup

CompositeTransform

CompositeTransform

CompositeTransform

CompositeTransform

DefaultAnimations.xaml

-

-

-

-

-

TransformOn

-

-

-

-

-

Compound Animations

Relative Translations

Repeating Animations

Events & Bindings

Primary/Secondary Completion Commands

StartWith

AllowOpacityReset

-

-

-

-

-

ClipToBounds

N/A

Animated Lists

Blur Effect

-

-

-

-

Saturation Effect

-

-

-

-

-

Tint Effect

-

-

-

-

-

Color Animations

-

Perspective Rotations (Swivel)

-

-

-

-

-

Debugging Animations

-

基本概念(Basic Concepts)

XamlFlair的基本概念是基于From和To的动画。由From动画组成的任何UI元素都将以一个或多个任意值开始,并使用相应属性的默认值完成。由To动画组成的任何UI元素都将以其当前状态开始,并设置为一个或多个任意值

From动画的示例(一个移动到Translation(0)的UI元素):

From动画

To动画示例(从当前状态滑出的UI元素):

To动画

注意:需要注意的是,对于彩色动画,此规则有一个例外,这在“基本动画类型”部分中进行了说明。

使用

首先,需要添加以下Xaml命名空间引用:

UWP and Uno:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
xmlns:xf="using:XamlFlair"

WPF:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
xmlns:xf="clr-namespace:XamlFlair;assembly=XamlFlair.WPF"

给任何需要动画的UI元素FrameworkElement添加附加属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Border xf:Animations.Primary="{StaticResource FadeIn}" />

注意:如果FrameworkElement在Xaml中定义了CompositeTransform,则它将在动画过程中更改。

注意StaticResource的用法是引用全局通用动画,这将在下一节中讨论。

基本动画类型(Base Animation Types)

淡入淡出(Fade)

淡入淡出动画

警告:设置FadeTo动画时要小心,因为如果VisibilityVisible,元素将保留在可视树中。在某些情况下,您可能需要手动管理IsHitTestVisible,以允许用户点击元素。

移动(Translate)

移动动画

缩放(Scale)

缩放动画

旋转(Rotate)

旋转动画

模糊 (Blur,只支持UWP 和 WPF)

模糊动画

饱和度 (Saturate,只支持UWP)

饱和度动画

色调(Tint)(只支持UWP)

色调动画

色彩 (Color,只支持WPF和Uno)

色彩动画

注意:重要的是要注意,当使用From动画设置色彩动画时,颜色将从指定值设置为其当前状态,而不是默认值。

旋轴 (Swivel,只支持UWP)

旋轴动画

注意:请阅读Perspective Rotations (*UWP Only*)[27]一节了解更多详细信息。

下面列出了使用XamlFlair时一些值得注意的默认值

  • Kind: FadeTo
  • Duration (milliseconds): 500
  • Easing: Cubic
  • Easing Mode: EaseOut
  • TransformCenterPoint: (0.5, 0.5)
  • Event: Loaded
  • InterElementDelay (milliseconds): 25 (List controls only)
  • TransformOn: Render (WPF only)
  • Saturation: 0.5 (UWP only)
  • Tint: Transparent (UWP only)

色彩动画 (Color Animations,只支持WPF和Uno)

使用色彩动画时需要注意,因为它们与其他基本类型动画略有不同。使用ColorToColorFrom时,必须执行以下操作:

  • 只能设置以下属性的动画:Control.Background, Control.Foreground, Control.BorderBrush, Border.Background, Border.BorderBrush, TextBlock.Foreground, Shape.Fill, Shape.Stroke
  • 确保在要设置动画的相应属性上设置brush
  • 还必须使用ColorOn指定目标属性

以下示例将为Rectangle的Fill属性设置从RoyalBlue到DarkGreen的动画:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<xf:AnimationSettings x:Key="SampleColorAnimation"
                      Kind="ColorTo"
                      Color="DarkGreen"
                      ColorOn="Fill" />

<Rectangle Fill="RoyalBlue"
           xf:Animations.Primary="{StaticResource SampleColorAnimation}" />

覆盖全局默认值

如果需要全局更改默认动画值之一(例如,默认Duration为750而不是500),则可以在应用程序的初始化代码中调用OverrideDefaultSettings函数。以下示例更改DurationEasing的默认值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
XamlFlair.Animations.OverrideDefaultSettings(
    duration: 750,
    easing: EasingType.Quadratic);

因此,在上面的示例代码中,每个动画都将以二次缓和的方式运行750ms。

使用ResourceDictionary进行基本设置

所有常见动画都应该放在全局ResourceDictionary(例如:Animations.xaml)中,并在应用程序中需要时使用。目标是将所有动画合并为一个具有有意义名称的文件,以便任何开发人员都能准确地了解将动画应用到FrameworkElement中的内容。下面是一个小例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:xf="using:XamlFlair">

    <x:Double x:Key="PositiveOffset">50</x:Double>
    <x:Double x:Key="NegativeOffset">-50</x:Double>
    <x:Double x:Key="SmallScaleFactor">0.75</x:Double>
    <x:Double x:Key="LargeScaleFactor">1.25</x:Double>

    <xf:AnimationSettings x:Key="FadeIn"
                          Kind="FadeFrom"
                          Opacity="0" />

    <xf:AnimationSettings x:Key="FadeOut"
                          Kind="FadeTo"
                          Opacity="0" />

    <!-- Scale to a larger value -->
    <xf:AnimationSettings x:Key="Expand"
                          Kind="ScaleXTo,ScaleYTo"
                          ScaleX="{StaticResource LargeScaleFactor}"
                          ScaleY="{StaticResource LargeScaleFactor}" />

    <!-- Scale from a larger value -->
    <xf:AnimationSettings x:Key="Contract"
                          Kind="ScaleXFrom,ScaleYFrom"
                          ScaleX="{StaticResource LargeScaleFactor}"
                          ScaleY="{StaticResource LargeScaleFactor}" />
    .
    .
    .
    </ResourceDictionary>

要设置应用程序中已有的这组预配置AnimationSettings,请执行以下步骤:

  1. 项目工程点击右键菜单,点击Add > New Item...
  2. 选择 Resource Dictionary 并命名为 Animations.xaml
  3. App.xaml内容如下:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Animations.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
  1. Animations.xaml中,复制粘贴以下相应链接中的内容
  • Animation settings for UWP[28]
  • Animation settings for WPF[29]
  • Animation settings for Uno[30]

你的应用程序现在有一组通用动画可以使用了。

默认动画 (只支持WPF)

除了创建包含自定义AnimationSettingsResourceDictionary之外,XamlFlair还提供一些默认动画。

要在应用程序中引用这些默认动画,请在App.xaml中执行以下步骤:

  1. 顶部添加XamlFlair.WPF命名空间
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    xmlns:xf="clr-namespace:XamlFlair;assembly=XamlFlair.WPF"
  1. 更新应用程序资源(Application Resources):
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <xf:XamlFlairResources />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>

您的应用程序现在有一系列全局默认的动画可以使用了。

如果Visual Studio Intellisense在使用<xf:XamlFlairResources />时不起作用,您可能需要尝试以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/XamlFlair.WPF;component/DefaultAnimations.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>

TransformOn 属性 (只支持WPF)

RenderTransform可使用TransformOn属性应用动画。可用选项为RenderLayout。未指定任何内容时,默认为Render。以下是关于两个选项的示例:

注意:非常重要的是要注意WPF的LayoutTransform不支持任何TranslateTransform,因此translate动画永远不会生效。您可以在这里[31]的备注部分了解更多信息。

原文readme.md太长了,翻译累了,大家有兴趣看原文吧,最后上一图:

参考资料

[1]

Sekuence Puzzle Game: https://sekuence.fun

[2]

给我买杯咖啡: https://www.buymeacoffee.com/xamlflair

[3]

Install from Nuget: #install-from-nuget

[4]

Features Overview: #features-overview

[5]

Basic Concepts: #basic-concepts

[6]

Usage: #usage

[7]

Base Animation Types: #base-animation-types

[8]

Color Animations (WPF And Uno Only): #color-animations-wpf-and-uno-only

[9]

Overriding the Global Default Values: #overriding-the-global-default-values

[10]

Using a ResourceDictionary for Base Settings: #using-a-resourcedictionary-for-base-settings

[11]

Default Animations (WPF Only): #default-animations-wpf-only

[12]

TransformOn Property (WPF Only): #transformon-property-wpf-only

[13]

Perspective Rotations (UWP Only): #perspective-rotations-uwp-only

[14]

Combining Animations: #combining-animations

[15]

Overriding Values: #overriding-values

[16]

Relative Translations on X and Y Axes: #relative-translations-on-x-and-y-axes

[17]

Compound Animations: #compound-animations

[18]

Repeating Animations: #repeating-animations

[19]

Events and Bindings: #events-and-bindings

[20]

Primary and Secondary Completion Commands: #primary-and-secondary-completion-commands

[21]

Using the StartWith Property: #using-the-startwith-property

[22]

Using the AllowOpacityReset Property (WPF Only): #using-the-allowopacityreset-property-wpf-only

[23]

Using the ClipToBounds Property (UWP And Uno Only): #using-the-cliptobounds-property-uwp-and-uno-only

[24]

Debugging Animations: #debugging-animations

[25]

Logging Animations: #logging-animations

[26]

ListViewBase (UWP and Uno) and ListBox-based (WPF) Animations: #listviewbase-uwp-and-uno-and-listbox-based-wpf-animations

[27]

Perspective Rotations (UWP Only): #perspective-rotations-uwp-only

[28]

Animation settings for UWP: https://github.com/XamlFlair/XamlFlair/blob/master/Samples/XamlFlair.Samples.UWP/Animations.xaml

[29]

Animation settings for WPF: https://github.com/XamlFlair/XamlFlair/blob/master/Samples/XamlFlair.Samples.WPF/Animations.xaml

[30]

Animation settings for Uno: https://github.com/XamlFlair/XamlFlair/blob/master/Samples/Uno/XamlFlair.Samples.Uno.Shared/Animations.xaml

[31]

这里: https://docs.microsoft.com/en-us/dotnet/api/system.windows.frameworkelement.layouttransform?redirectedfrom=MSDN&view=net-5.0#remarks

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Dotnet9 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
UWP基础教程 - XAML资源
在Windows 10 UWP应用开发中,XAML用于应用界面设计,无论是开发人员还是设计人员经常会设计自定义用户界面或者控件行为,其中会涉及到不同方面的代码设计,例如控件模板,控件样式,动画设计等。为了方便设计,管理和重复利用这些通用代码,XAML提出了资源(Resources)的概念 资源(Resources),其概念和Web应用中的CSS(Cascading Style Sheets)样式类似,其目的为了实现对象的重复调用。在Windows 10 UWP应用开发中,资源的概念不仅仅局限于对控件样
陈仁松
2018/03/20
1.6K0
WPF 漂亮的现代化控件 新 ModernWPF 界面库
这是一个在 GitHub 上完全开源的库,有十分漂亮的界面,整个都是 Win10 风,界面部分和默认 UWP 相近
林德熙
2020/09/15
2.5K0
WPF 漂亮的现代化控件 新 ModernWPF 界面库
3D 穿梭效果?使用 UWP 也能搞定
这个效果太神奇了,他还问我能不能用 WPF 搞出来,因为我完全没用过 WPF 的 3D,我第一反应是“这太难为我了”。
dino.c
2021/11/15
5190
张高兴的 UWP 开发笔记:定制 ContentDialog 样式
  我需要一个背景透明的 ContentDialog,像下图一样。如何定制?写了一个简单的示例(https://github.com/ZhangGaoxing/uwp-demo/tree/master
张高兴
2018/05/18
1K0
win10 uwp 使用资源在后台创建控件
本文告诉大家如何使用资源在后台创建控件,本文使用按钮做例子,包括如何绑定资源,找到资源。
林德熙
2018/09/19
6560
win10 uwp 使用资源在后台创建控件
.NET 9 中为 WPF 新增的功能
本文介绍适用于 .NET 9 的 Windows Presentation Foundation (WPF) 中的新增功能。今年 WPF 的主要关注领域是改进 WPF 的视觉功能,并为 Windows 11 提供基于 Fluent 设计原则的新主题。
独立观察员
2024/11/23
1070
.NET 9 中为 WPF 新增的功能
一款的 WPF 主题和控件包,免费开源
基于 .Net Framework 4.6 和 .Net Core 3.1 和 .Net 6 的 WPF
沙漠尽头的狼
2023/08/31
4430
一款的 WPF 主题和控件包,免费开源
WPF 已知问题 资源字典树引用与资源寻找的坑
大家都知道,在 WPF 里面,可以让资源字典合并其他资源字典,从而定义出资源字典引用树。然而在资源字典引用树里面,如果没有理清关系,将可以作出一个超级复杂的引用关系网。如果在性能优化中,将网断开部分,可能就会出现找不到资源的情况。本文将告诉大家 WPF 的资源字典树在引用和寻找关系上的坑
林德熙
2022/08/12
8930
WPF 已知问题 资源字典树引用与资源寻找的坑
06Prism WPF 入门实战 - Log&控件库
源码及PPT地址:https://github.com/JusterZhu/wemail
JusterZhu
2022/12/07
7530
06Prism WPF 入门实战 - Log&控件库
[WPF]本地化入门
WPF的本地化是个很常见的功能,我做过的WPF程序大部分都实现了本地化(不管最终有没有用到)。通常本地化有以下几点需求:
dino.c
2019/01/18
2.5K0
[WPF]本地化入门
[UWP]了解IValueConverter
IValueConverter是用于数据绑定的强大的武器,它用于Value在Binding Source和Binding Target之间的转换。本文将介绍IValueConverter的用法及一些常用的实现。
dino.c
2019/01/18
9220
[UWP]了解IValueConverter
少量代码设计一个登录界面 - .NET CORE(C#) WPF开发
继续 MaterialDesignThemes 开源控件库学习,本文简单使用输入控件的水印附加属性:materialDesign:HintAssist.Hint。
zls365
2020/12/29
1.6K0
少量代码设计一个登录界面 - .NET CORE(C#) WPF开发
WPF 应用完全模拟 UWP 的标题栏按钮
发布于 2018-08-04 09:35 更新于 2018-08-05 02:21
walterlv
2018/09/18
2.2K0
WPF 应用完全模拟 UWP 的标题栏按钮
开源WPF控件库推荐:ModernWpf
站长从博客园 林德熙 处了解到此控件库,通过clone、编译、运行,发现这库确实不错,正如 林德熙 所言:“有十分漂亮的界面,整个都是 Win10 风,界面部分和默认 UWP 相近, 这个库支持了 .NET Framework 4.5 和以上的版本,以及 .NET Core 3.0 和以上的版本,可以在 Windows Vista SP2 和以上的系统运行。” 本人遂从该仓库中将readme搬运过来,希望让更多人知道有这个库的存在,能给WPF开发者多一个UI库选择。
zls365
2020/12/29
4.5K0
开源WPF控件库推荐:ModernWpf
【NEW】WPF MVVM 模式下自写自用的窗口样式
SVG是一种图形文件格式,它的英文全称为Scalable Vector Graphics,意思为可缩放的矢量图形。它是基于XML(Extensible Markup Language),由World Wide Web Consortium(W3C)联盟进行开发的。严格来说应该是一种开放标准的矢量图形语言,可让你设计激动人心的、高分辨率的Web图形页面。用户可以直接用代码来描绘图像,可以用任何文字处理工具打开SVG图像,通过改变部分代码来使图像具有交互功能,并可以随时插入到HTML中通过浏览器来观看。
Shunnet
2022/09/01
2.4K0
【NEW】WPF MVVM 模式下自写自用的窗口样式
WPF 将 StaticResource 和 ResourceDictionary 放在一起的魔幻行为
本文将记录一些在 WPF 里面,使用 StaticResource 将 ResourceDictionary 玩坏的做法。大家可以放心的是,这些玩法基本只有高级玩家或逗比开发者才会使用到
林德熙
2023/06/23
7370
win10 uwp 资源字典 资源的key所有的元素都可以定义资源合并资源字典主题资源共享的资源用户控件资源定义
本文主要翻译ResourceDictionary and XAML resource references - UWP app developer ,里面的代码我重新写了一下,有一些不相同。
林德熙
2018/09/18
1.1K0
win10 uwp MVVM入门
MVVM 是一个强大的架构,基本从 WPF 开始,wr(我说的就是微软)就提倡使用 MVVM。它可以将界面和后台分离,让开发人员可以不关心界面是怎样,全心投入到后台代码编写中。 然后在编写完后台代码后,可以快速和界面设计师做出来的界面绑定到一起,即使频繁修改界面也几乎不需要去修改后台代码。 更让人喜欢的是,他可以让我们简单地进行单元测试,因为我们可以不打开界面进行测试功能,方便了我们的测试开发。 UWP 虽然可以直接在xaml.cs 写逻辑但是我们是推荐使用 MVVM 框架,写一个自己的框架也很简单。 本文主要:如何在 UWP 使用 MVVM,如何做一个自己的框架。
林德熙
2018/09/19
2K0
win10 uwp MVVM入门
C# WPF框架Caliburn.Micro入门实例1
详细介绍了一个最简单的Caliburn.Micro框架如何搭建起来,今天我们接着上次的话题继续讲解。
用户9127601
2021/11/01
7320
使用 Microsoft.UI.Xaml 解决 UWP 控件和对老版本 Windows 10 的兼容性问题
发布于 2018-07-21 13:51 更新于 2018-07-24 01:17
walterlv
2018/09/18
3.6K0
使用 Microsoft.UI.Xaml 解决 UWP 控件和对老版本 Windows 10 的兼容性问题
推荐阅读
相关推荐
UWP基础教程 - XAML资源
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验