从样式内部动画制作WPF按钮

时间:2010-04-13 14:32:23

标签: c# wpf windows xaml

我目前正在尝试使用WPF在我的表单上制作按钮 - 这是大学课程的一部分,所以这一切都是为了展示知识而不是看起来很好。

我们已经展示了如何为每个按钮设置动画,但由于我希望每个按钮上的动画都是相同的,所以我正在使用一种风格 - 我们没有教过这些东西,哪些查找文档就像找到国际海事组织Big Foot的证据。

到目前为止,我的代码是:

 <Style TargetType="{x:Type Button}" x:Key="ButtonAnimation">
            <Style.Triggers>
                <EventTrigger RoutedEvent="Button.Click">
                    <EventTrigger.Actions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="Angle"
                                                 To="360" Duration="0:0:1"
                                                 FillBehavior="Stop" />
                        </Storyboard>
                    </BeginStoryboard>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="ScaleY"
                                                 To="0.1" Duration="0:0:0.5"
                                                 FillBehavior="Stop" AutoReverse="True" />
                        </Storyboard>
                    </BeginStoryboard>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="ScaleX"
                                                 To="0.1" Duration="0:0:0.5"
                                                 FillBehavior="Stop" AutoReverse="True" />
                        </Storyboard>
                    </BeginStoryboard>
                    </EventTrigger.Actions>
                </EventTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>    

TargetProperty =“”值是不正确的,在我的生活中,我无法在网上找到任何应​​该存在的内容。如果动画应用于每个按钮而不是样式,那么当前的值就是您所拥有的。

我如何让它工作?什么是正确的TargetProperty?

1 个答案:

答案 0 :(得分:3)

我想这......

Storyboard.TargetProperty="Angle"

......应该......

Storyboard.TargetProperty="(Button.RenderTransform).(RotateTransform.Angle)"

其他的:

Storyboard.TargetProperty="(Button.RenderTransform).(ScaleTransform.ScaleY)"
Storyboard.TargetProperty="(Button.RenderTransform).(ScaleTransform.ScaleX)"

您可能需要将RenderTransform替换为LayoutTransform,具体取决于您在标记中使用的内容。

但是,只有在您只有两个转换中的一个转换时才会有效,即RotateTransform ScaleTransform。如果你将它们放在TransformGroup中,事情会变得更加复杂。如果您已将RotateTransform定义为第一个孩子,并将ScaleTransform定义为TransformGroup的第二个孩子,那么这应该有效(未经过测试):

(Button.RenderTransform).(TransformGroup.Children)[0].(RotateTransform.Angle)
(Button.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.X)
(Button.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.Y)

但是,在更改变换的顺序或删除其中一个时必须小心,因为这会破坏您的动画......

祝你好运!