【C#】【UWP】アニメーションができたりできなかったりする理由と解決方法
UWPアニメーションの区分概要
ストーリーボードに設定されたアニメーション (XAML) (Windows)
Windowsランタイムアプリ(UWP)でのアニメーションには依存型と独立型があります。
これは重いアニメーションを軽々しく使わせないためです。
処理を重くしそうなやつが依存型で、そうじゃないのが独立型です。
独立型は以下の種類のアニメーションになります。
・Durationが0秒
・アニメーション対象がUIElement.Opacity
・アニメーション対象がUIElementのプロパティ (RenderTransform、Projection、Clip) のサブプロパティ値
・アニメーション対象がCanvas.Left または Canvas.Top
・アニメーション対象がBrush 値であり、SolidColorBrush を使ってColorAnimationする
・アニメーションが ObjectAnimationUsingKeyFrames
それ以外は全部依存型と思っていいです。
なんでもできるようにするには
依存型の場合はそのままだとアニメーションできません。
xamlでアニメーションタグにEnableDependentAnimation="True"を設定します。
独立型の場合は必要ありません。
以下のコードではRectangleのHeightをアニメーションさせています。
//xaml <Grid x:Name="grid" Background="{ThemeResource AppBarItemPressedForegroundThemeBrush}" > <StackPanel x:Name="LayoutRoot" Margin="515,138,-515,-138" > <StackPanel.Resources> <Storyboard x:Name="myStoryboard"> <DoubleAnimation From="10" To="200" Duration="0:0:1" AutoReverse="True" Storyboard.TargetName="a" Storyboard.TargetProperty="Height" ★EnableDependentAnimation="True" /> </Storyboard> </StackPanel.Resources> <Rectangle x:Name="a" Fill="Blue" Width="100" Height="30" Margin="540,0" /> </StackPanel> <Button x:Name="button1" Content="test" HorizontalAlignment="Left" VerticalAlignment="Top" Click="button1_Click" Margin="540,20"/> </Grid> //コードビハインド private void button1_Click(object sender, RoutedEventArgs e) { myStoryboard.Begin(); }
実行すると高さが変動します。
余談
厄介なのはUWPとそれ以前で仕様が変わっている点です。
アニメーション機構の基本や名称は変わってないので従来のサンプルコードがひっかかってしまいます。
そして動かない。わからない。もういいや。
最終的にフォーラムに質問投げて解消しましたが、2~3日苦しんでいました。
情報の見つけにくさはどうにかならないですかね・・・。