前提・実現したいこと
RotateTransform を複数のコントロールで共有することでメモリを節約しつつ同じ角度で回転アニメーションさせたいです。(下のGIF画像参照)
このようなコントロールが200個ほどあるので、コントロールごとに RotateTransform のインスタンスを生成するのは避けたいです。
そのため、RotateTransform を Resources にしておいて、共有しようと思いました。
発生している問題
方法: 要素のスピンを設定する のコードの RotateTransform を Resources に移動して、StaticResourceExtension で参照するようにした所、回転しなくなりました。
XAML
1<Window ...> 2 <Window.Resources> 3 <RotateTransform x:Key="MyAnimatedTransform" Angle="0" /> 4 </Window.Resources> 5 <StackPanel Margin="50"> 6 <Button 7 RenderTransformOrigin="0.5,0.5" 8 HorizontalAlignment="Left" RenderTransform="{StaticResource MyAnimatedTransform}"> 9 Hello,World 10 <Button.Triggers> 11 <EventTrigger RoutedEvent="Button.Click"> 12 <BeginStoryboard> 13 <Storyboard> 14 <DoubleAnimation 15 Storyboard.Target="{StaticResource MyAnimatedTransform}" 16 Storyboard.TargetProperty="(RotateTransform.Angle)" 17 From="0.0" To="360" Duration="0:0:1" /> 18 </Storyboard> 19 </BeginStoryboard> 20 </EventTrigger> 21 </Button.Triggers> 22 </Button> 23 </StackPanel> 24</Window>
質問
- なぜ上記のプログラムで Button が回転しないのか分かりません。
- 複数のコントロールの RenderTransform プロパティの値を、単一の RotateTransform のインスタンスに設定し、かつ同じ回転アニメーションをさせるにはどうすれば良いですか。
環境
- WPF
- .NET Core 3.1
- Visual Studio 2019
- Windows 10
追記
リソースに、ダミーのオブジェクトを置いて、そのプロパティ経由でアニメーションさせると、動作しました。
DependencyObject のプロパティ経由じゃないとアニメーション出来ない仕様なんでしょうか……。
XAML
1<Window ...> 2 <Window.Resources> 3 <RotateTransform x:Key="MyAnimatedTransform" Angle="0" /> 4 <UIElement x:Key="MyAnimatedTransformHolder" 5 RenderTransform="{StaticResource MyAnimatedTransform}" /> 6 </Window.Resources> 7 <StackPanel Margin="50"> 8 <Button HorizontalAlignment=" Left"> 9 Hello,World 10 <Button.Triggers> 11 <EventTrigger RoutedEvent="Button.Click"> 12 <BeginStoryboard> 13 <Storyboard> 14 <DoubleAnimation 15 Storyboard.Target="{StaticResource MyAnimatedTransformHolder}" 16 Storyboard.TargetProperty="RenderTransform.(RotateTransform.Angle)" 17 From="0.0" To="360" Duration="0:0:1" /> 18 </Storyboard> 19 </BeginStoryboard> 20 </EventTrigger> 21 </Button.Triggers> 22 </Button> 23 <Rectangle Fill="Red" RenderTransformOrigin="0.5,0.5" Width="100" 24 Height="200" RenderTransform="{StaticResource MyAnimatedTransform}" /> 25 </StackPanel> 26</Window>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/22 04:32
2021/12/22 05:31
2021/12/22 21:39