0

私はWPFが初めてで、おそらくばかげた質問があります。

4 つのボタンのうちの 1 つをクリックすると、同じアニメーション (360 度回転) で 4 つのボタンをアニメーション化しようとしていますが、このボタンだけがアニメーション化されます。

これが私がこれまでに持っているものです:

    <Window.Resources>
    <Storyboard x:Key="Storyboard" BeginTime="00:00:00" Duration="00:00:10">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="rotButton" Storyboard.TargetProperty="(RotateTransform.Angle)">
            <SplineDoubleKeyFrame KeyTime="0:0:00.0" Value="0.0" />
            <SplineDoubleKeyFrame KeyTime="0:0:01.0" Value="360.0" />
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>

</Window.Resources>

rotButton は最初のボタンで定義されています。

<Button Click="Button_Click">
            <StackPanel>
                <Image Source="open.png" Height="46" Width="48" />
            </StackPanel>
            <Button.RenderTransform>
                <TransformGroup>
                    <RotateTransform x:Name="rotButton" Angle="0" CenterX="25" CenterY="25" />
                    <ScaleTransform x:Name="scaButton" ScaleX="1" ScaleY="1" CenterX="50" CenterY="25" />
                </TransformGroup>
            </Button.RenderTransform>
            <Button.Triggers>
                <EventTrigger RoutedEvent="Button.Click">
                    <BeginStoryboard Storyboard="{StaticResource Storyboard}" />
                </EventTrigger>
            </Button.Triggers>
        </Button>

このコードを他のすべてのボタンに使用し、すべてのボタンに「共通」の Button.RenderTransform を使用するにはどうすればよいですか? さらに 3 つのストーリーボードを作成し、各ボタンに rotButton1、rotButton2 などを使用する、よりスマートな方法があるはずです。

それが理にかなっていて、正しい方向に向けてくれることを願っています:)

ありがとう

4

1 に答える 1

1

ボタンのスタイルを作成する場合、セッターを使用して、そのスタイルを使用するボタンの各インスタンスの RenderTransform を設定できます。また、スタイルはトリガーを持つことができます。

トリックは正しいパス構文ですhttp://blogs.charteris.com/blogs/patl-closed/archive/2007/03/20/Complex-PropertyPath-syntax.aspx

    <Window.Resources>
    <TransformGroup x:Key="transformGroup">
        <RotateTransform Angle="0" CenterX="25" CenterY="25" />
        <ScaleTransform ScaleX="1" ScaleY="1" CenterX="50" CenterY="25" />
    </TransformGroup>
    <Style x:Key="MyButtonStyle"  TargetType="{x:Type Button}">
        <Setter Property="RenderTransform" Value="{StaticResource transformGroup}"/>
        <Style.Triggers>
            <EventTrigger RoutedEvent="Button.Click">
                <BeginStoryboard>
                    <Storyboard BeginTime="00:00:00" Duration="00:00:10">
                        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Button.RenderTransform).(TransformGroup.Children)[0].(RotateTransform.Angle)">
                            <SplineDoubleKeyFrame KeyTime="0:0:00.0" Value="0.0" />
                            <SplineDoubleKeyFrame KeyTime="0:0:01.0" Value="360.0" />
                        </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>
<Grid>
    <StackPanel>
        <Button Style="{StaticResource MyButtonStyle}"/>
        <Button Style="{StaticResource MyButtonStyle}"/>           
    </StackPanel>
</Grid>
于 2012-11-18T19:35:02.620 に答える