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)

特性 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)

旋轉透視動畫

注意:請閱讀透視旋轉 (僅 UWP)一節以了解更多詳細資訊。

下面列出了使用 XamlFlair 時一些值得注意的 預設值

  • Kind: FadeTo
  • Duration (毫秒): 500
  • Easing: Cubic
  • Easing Mode: EaseOut
  • TransformCenterPoint: (0.5, 0.5)
  • Event: Loaded
  • InterElementDelay (毫秒): 25 (僅 List 控制項)
  • 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,因此位移動畫永遠不會生效。您可以在這裡的備註部分了解更多資訊。

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

繼續探索

延伸閱讀

更多文章
同分類 / 同標籤 2025/1/26

WPF 藉助自訂 XML 檔案實現國際化

本文詳細介紹了在WPF程式中使用自訂XML檔案實現國際化的方法,包括安裝必備NuGet套件、動態獲取語言清單、動態切換語言、在程式碼和XAML介面中使用翻譯字串等內容,同時提供了原始碼連結,幫助開發者輕鬆實現WPF應用程式的國際化。

繼續閱讀