WPFのすごいアニメーションライブラリ:XamlFlair

WPFのすごいアニメーションライブラリ:XamlFlair

XamlFlairライブラリの目標は、一般的なアニメーションの実装を簡素化し、開発者が数行のXamlで`簡単に`単一または複合アニメーションセットを追加できるようにすることです。

最終更新 2023/07/03 13:33
沙漠尽头的狼
読了目安 5 分
カテゴリ
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 - - - - -
複合アニメーション
相対変換
繰り返しアニメーション
イベントとバインディング
プライマリ/セカンダリ完了コマンド
StartWith
AllowOpacityReset - - - - -
ClipToBounds N/A
アニメーションリスト
ぼかし効果 - - - -
彩度効果 - - - - -
色味効果 - - - - -
カラーアニメーション -
パースペクティブローテーション(スイベル) - - - - -
アニメーションのデバッグ -

基本概念(Basic Concepts)

XamlFlair の基本概念は、From と To アニメーションに基づいています。From アニメーションで構成される UI 要素は、1 つ以上の任意の値から開始し、対応するプロパティのデフォルト値で完了します。To アニメーションで構成される UI 要素は、現在の状態から開始し、1 つ以上の任意の値に設定されます

From アニメーションの例(Translation(0)に移動する UI 要素):

Fromアニメーション

To アニメーションの例(現在の状態からスライドアウトする UI 要素):

Toアニメーション

注意:カラーアニメーションに関しては、このルールに例外があり、「基本アニメーションタイプ」セクションで説明されています。

使用方法

まず、以下の Xaml 名前空間参照を追加する必要があります。

UWP および 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(リストコントロールのみ)
  • TransformOn: Render(WPF のみ)
  • Saturation: 0.5(UWP のみ)
  • Tint: Transparent(UWP のみ)

カラーアニメーション (Color Animations,WPF および Uno のみ)

カラーアニメーションを使用する際は、他の基本タイプのアニメーションと若干異なる点に注意が必要です。ColorTo および ColorFrom を使用する場合、以下の操作を行う必要があります:

  • 次のプロパティのみアニメーション化可能:Control.BackgroundControl.ForegroundControl.BorderBrushBorder.BackgroundBorder.BorderBrushTextBlock.ForegroundShape.FillShape.Stroke
  • アニメーション化する対象のプロパティにブラシが設定されていることを確認する
  • 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 を 500 ではなく 750 にしたい場合)を変更する必要がある場合は、アプリケーションの初期化コードで OverrideDefaultSettings 関数を呼び出すことができます。次の例では、DurationEasing のデフォルト値を変更しています:

XamlFlair.Animations.OverrideDefaultSettings(
    duration: 750,
    easing: EasingType.Quadratic);

したがって、上記のサンプルコードでは、すべてのアニメーションが 750ms で二次イージングで実行されます。

ResourceDictionary を使用した基本設定

すべての「一般的な」アニメーションは、グローバルな ResourceDictionary(例:Animations.xaml)に配置し、アプリケーション内で必要なときに使用するようにします。目標は、すべてのアニメーションを意味のある名前で 1 つのファイルにまとめ、どの開発者でも 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" />

  <!-- より大きな値に拡大 -->
  <xf:AnimationSettings
    x:Key="Expand"
    Kind="ScaleXTo,ScaleYTo"
    ScaleX="{StaticResource LargeScaleFactor}"
    ScaleY="{StaticResource LargeScaleFactor}"
  />

  <!-- より大きな値から縮小 -->
  <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 のみ

カスタム AnimationSettings を含む ResourceDictionary を作成する以外に、XamlFlair はいくつかの「デフォルト」アニメーションも提供しています。

アプリケーションでこれらのデフォルトアニメーションを参照するには、App.xaml で次の手順を実行します:

  1. 上部に XamlFlair.WPF 名前空間を追加します:
xmlns:xf="clr-namespace:XamlFlair;assembly=XamlFlair.WPF"
  1. アプリケーションリソースを更新します:
<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 です。2 つのオプションの例を以下に示します:

TransformOn アニメーション

注意:WPF の LayoutTransformTranslateTransform をサポートしていないため、移動アニメーションは決して機能しないことに非常に注意してください。詳細については、こちらの備考セクションをご覧ください。

原文の readme.md が長すぎるので、翻訳はここで疲れました。みなさんが原文に興味があれば読んでください。最後に画像を 1 つ:

さらに探索

関連読書

その他の記事
同じカテゴリ / 同じタグ 2025/09/13

WPF から Avalonia への移行シリーズ:なぜ WPF プログラムを Avalonia に移行しなければならないのか

過去数年間、当社の上位機ソフトウェアは主に WPF と WinForm で開発されてきました。これらの技術は Windows プラットフォームで非常に便利であり、小規模試作から現在の規模拡大による納品まで、私たちを支えてきました。しかし、ビジネスの発展や顧客ニーズの変化に伴い、単一の Windows テクノロジースタックは私たちが必ず乗り越えなければならない壁となってきました。

続きを読む
同じカテゴリ / 同じタグ 2025/01/26

WPF カスタムXMLファイルによる国際化

この記事では、WPFプログラムでカスタムXMLファイルを使用して国際化を実現する方法について詳しく説明します。必要なNuGetパッケージのインストール、言語リストの動的取得、言語の動的切り替え、コードおよびXAMLインターフェースでの翻訳文字列の使用などを含み、ソースコードのリンクも提供し、開発者がWPFアプリケーションの国際化を簡単に実装できるように支援します。

続きを読む