原文連結:https://github.com/XamlFlair/XamlFlair
翻譯:沙漠盡頭的狼,linluz(本文未全文翻譯,建議閱讀原文了解更多)

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

展示
Sekuence 益智游戏|
:-------------------------------------------:
|
支持作者
如果你想用一些咖啡来支持我的工作,你可以在这里做:给我买杯咖啡。你的帮助让我有动力继续花时间在这个项目上,并继续维护和更新它的新功能。提前谢谢!
內容
從 nuget 安裝
| 平台 | Package | NuGet |
|---|---|---|
| UWP | XamlFlair.UWP | |
| WPF | XamlFlair.WPF | |
| Uno | XamlFlair.Uno |
使用以下命令從package manager console下載xamlflair:
UWP:
Install-Package XamlFlair.UWP
您的應用程式必須不低於 windows 10 版本 1809(內部版本 17763)
WPF:
Install-Package XamlFlair.WPF
Uno:
Install-Package XamlFlair.Uno
您的 uwp 應用程式必須至少針對 windows 10 版本 1809(構建 18362)
功能概述(features overview)
| Feature | UWP | WPF | UWP (Uno) | iOS (Uno) | Android (Uno) | wasm (uno) 試驗性 |
|---|---|---|---|---|---|---|
| 動畫系統 | 組合 | 故事板 | 故事板 | 故事板 | 故事板 | 故事板 |
| 變換類型 | N/A | 變換群組 | 複合變換 | 複合變換 | 複合變換 | 複合變換 |
| DefaultAnimations.xaml | - | ✔ | - | - | - | - |
TransformOn |
- | ✔ | - | - | - | - |
| 複合動畫(compound animations) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| 相對變換(relative translations) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| 循環動畫(repeating animations) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| 事件 & 綁定(events & bindings) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
| 主/次完成命令 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
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 元素):

to 動畫示例(從當前狀態滑出的 ui 元素):

注意:需要注意的是,對於彩色動畫,此規則有一個例外,這在“基本動畫類型”部分中進行了說明。
使用
首先,需要添加以下 xaml 命名空間引用:
UWP and Uno:
xmlns:xf="using:XamlFlair"
WPF:
xmlns:xf="clr-namespace:XamlFlair;assembly=XamlFlair.WPF"
给任何需要动画的 UI 元素FrameworkElement添加附加属性:
<Border xf:Animations.Primary="{StaticResource FadeIn}" />
注意:如果
FrameworkElement在 Xaml 中定义了CompositeTransform,则它将在动画过程中更改。
注意:
StaticResource的用法是引用全局通用动画,这将在下一节中讨论。
基本動畫類型(base animation types)
淡入淡出(fade)

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

縮放(scale)

旋轉(rotate)

模糊 (blur,只支持 uwp 和 wpf)

飽和度 (saturate,只支持 uwp)

色調(tint)(只支持 uwp)

色彩 (color,只支持 wpf 和 uno)

注意:重要的是要注意,当使用
From动画设置色彩动画时,颜色将从指定值设置为其当前状态,而不是默认值。
旋軸 (swivel,只支持 uwp)

注意:请阅读Perspective Rotations (UWP Only)一节了解更多详细信息。
下面列出了使用 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)
使用色彩动画时需要注意,因为它们与其他基本类型动画略有不同。使用ColorTo和ColorFrom时,必须执行以下操作:
- 只能设置以下属性的动画:
Control.Background,Control.Foreground,Control.BorderBrush,Border.Background,Border.BorderBrush,TextBlock.Foreground,Shape.Fill,Shape.Stroke - 確保在要設置動畫的相應屬性上設置 brush
- 还必须使用
ColorOn指定目标属性
以下示例将为 Rectangle 的Fill属性设置从 RoyalBlue 到 DarkGreen 的动画:
<xf:AnimationSettings
x:Key="SampleColorAnimation"
Kind="ColorTo"
Color="DarkGreen"
ColorOn="Fill"
/>
<Rectangle
Fill="RoyalBlue"
xf:Animations.Primary="{StaticResource SampleColorAnimation}"
/>
覆蓋全局默認值
如果需要全局更改默认动画值之一(例如,默认Duration为 750 而不是 500),则可以在应用程序的初始化代码中调用OverrideDefaultSettings函数。以下示例更改Duration和Easing的默认值:
XamlFlair.Animations.OverrideDefaultSettings(
duration: 750,
easing: EasingType.Quadratic);
因此,在上面的示例代碼中,每個動畫都將以二次緩和的方式運行 750ms。
使用ResourceDictionary进行基本设置
所有常见动画都应该放在全局ResourceDictionary(例如:Animations.xaml)中,并在应用程序中需要时使用。目标是将所有动画合并为一个具有有意义名称的文件,以便任何开发人员都能准确地了解将动画应用到FrameworkElement中的内容。下面是一个小例子:
<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,请执行以下步骤:
- 項目工程點擊右鍵菜單,點擊add > new item...
- 选择 Resource Dictionary 并命名为
Animations.xaml App.xaml内容如下:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Animations.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
- 在
Animations.xaml中,复制粘贴以下相应链接中的内容
你的应用程序现在有一组通用动画可以使用了。
默認動畫 (僅 wpf)
除了创建包含自定义AnimationSettings的ResourceDictionary之外,XamlFlair 还提供一些默认动画。
要在应用程序中引用这些默认动画,请在App.xaml中执行以下步骤:
- 顶部添加
XamlFlair.WPF命名空间
xmlns:xf="clr-namespace:XamlFlair;assembly=XamlFlair.WPF"
- 更新應用程式資源(application resources):
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<xf:XamlFlairResources />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
您的应用程序现在有一系列全局默认的动画可以使用了。
如果 Visual Studio Intellisense 在使用<xf:XamlFlairResources />时不起作用,您可能需要尝试以下操作:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="pack://application:,,,/XamlFlair.WPF;component/DefaultAnimations.xaml"
/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
TransformOn 属性 (仅 WPF)
RenderTransform可使用TransformOn属性应用动画。可用选项为Render和Layout。未指定任何内容时,默认为Render。以下是关于两个选项的示例:

注意:非常重要的是要注意 WPF 的
LayoutTransform不支持任何TranslateTransform,因此 translate 动画永远不会生效。您可以在这里的备注部分了解更多信息。
原文readme.md太長了,翻譯累了,大家有興趣看原文吧,最後上一圖:
