wpf牛逼的動畫庫:xamlflair

wpf牛逼的動畫庫:xamlflair

xamlflair庫的目標是簡化常見動畫的實現,並允許開發人員使用幾行xaml`輕鬆`地添加單個或組合的動畫集。

最后更新 2023/7/3 下午1:33
沙漠尽头的狼
预计阅读 8 分钟
分类
WPF
专题
wpf開源項目 wpf ui設計
标签
.NET WPF wpf開源項目 開源 動畫庫

原文連結:https://github.com/XamlFlair/XamlFlair

翻譯:沙漠盡頭的狼,linluz(本文未全文翻譯,建議閱讀原文了解更多)

XamlFlair

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

案例程序

展示

Sekuence 益智游戏| :-------------------------------------------: 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 元素):

From动画

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

To动画

注意:需要注意的是,對於彩色動畫,此規則有一個例外,這在“基本動畫類型”部分中進行了說明。

使用

首先,需要添加以下 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动画时要小心,因为如果VisibilityVisible,元素将保留在可视树中。在某些情况下,您可能需要手动管理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)

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

  • 只能设置以下属性的动画: 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函数。以下示例更改DurationEasing的默认值:

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,请执行以下步骤:

  1. 項目工程點擊右鍵菜單,點擊add > new item...
  2. 选择 Resource Dictionary 并命名为 Animations.xaml
  3. App.xaml内容如下:
<Application.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="Animations.xaml" />
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Application.Resources>
  1. Animations.xaml中,复制粘贴以下相应链接中的内容

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

默認動畫 (僅 wpf)

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

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

  1. 顶部添加XamlFlair.WPF命名空间
xmlns:xf="clr-namespace:XamlFlair;assembly=XamlFlair.WPF"
  1. 更新應用程式資源(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属性应用动画。可用选项为RenderLayout。未指定任何内容时,默认为Render。以下是关于两个选项的示例:

TransformOn动画

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

原文readme.md太長了,翻譯累了,大家有興趣看原文吧,最後上一圖:

Keep Exploring

延伸阅读

更多文章
同分类 / 同标签 2025/1/26

wpf 藉助自定義 xml 文件實現國際化

本文詳細居間了在wpf程式中使用自定義xml文件實現國際化的方法,包括安裝必備nuget包、動態獲取語言列表、動態切換語言、在代碼和xaml界面中使用翻譯字符串等內容,同時提供了源碼連結,幫助開發者輕鬆實現wpf應用的國際化。

继续阅读