는 XAML에서 잘못된 몇 가지가 있습니다. 변환 인라인으로 시작한 다음 리소스로 리팩터링합니다. 불필요하게 문제를 복잡하게 만들지 않기 위해 2D RotateTransform으로 변경했습니다.
<Button Height="20" Width="100"
RenderTransformOrigin=".5,.5"
Content="Blah">
<Button.RenderTransform>
<RotateTransform Angle="0" x:Name="MyAnimatedTransform"/>
</Button.RenderTransform>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="MyAnimatedTransform"
Storyboard.TargetProperty="(RotateTransform.Angle)"
From="0.0" To="360" Duration="0:0:1" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Button.Triggers>
</Button>
그런 다음 우리는 스토리 보드를 꺼내 :
<Window.Resources>
<Storyboard x:Key="MyStoryBoard">
<DoubleAnimation
Storyboard.TargetName="MyAnimatedTransform"
Storyboard.TargetProperty="(RotateTransform.Angle)"
From="0.0" To="360" Duration="0:0:.3" />
</Storyboard>
</Window.Resources>
<Grid>
<Button Height="20" Width="100"
RenderTransformOrigin=".5,.5"
Content="Blah">
<Button.RenderTransform>
<RotateTransform Angle="0" x:Name="MyAnimatedTransform"/>
</Button.RenderTransform>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<EventTrigger.Actions>
<BeginStoryboard Storyboard="{StaticResource MyStoryBoard}"/>
</EventTrigger.Actions>
</EventTrigger>
</Button.Triggers>
</Button>
</Grid>
을 그리고 마지막으로 RotateTransform
우리는 시작한다. Storyboard.TargetName 속성으로이를 참조하는 것은 여기서 작동하지 않습니다.
<Window.Resources>
<RotateTransform Angle="0" x:Key="WorldTransform"/>
<Storyboard x:Key="MyStoryBoard">
<DoubleAnimation
Storyboard.Target="{Binding TemplatedParent}"
Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
From="0.0" To="360" Duration="0:0:.3" />
</Storyboard>
</Window.Resources>
<Grid>
<Button Height="20" Width="100"
RenderTransformOrigin=".5,.5"
Content="Blah">
<Button.RenderTransform>
<StaticResource ResourceKey="WorldTransform" />
</Button.RenderTransform>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<EventTrigger.Actions>
<BeginStoryboard Storyboard="{StaticResource MyStoryBoard}"/>
</EventTrigger.Actions>
</EventTrigger>
</Button.Triggers>
</Button>
</Grid>
편집 : 당신은 Storyboard.Target 속성을 필요로 인해 ;-) 보너스 질문에 당신이 (가) 포함하는 그리드에 자리를 차지할 변환한다고 가정. 단순히 Grid에서 Button.Click 이벤트를 잡아 당깁니다 (이벤트는 기억됩니까?) 트리거를 넣으십시오. 이제 TemplatedParent가 모눈이되어 더 이상 단추가 아닙니다.
<Grid RenderTransformOrigin=".5,.5">
<Grid.RenderTransform>
<StaticResource ResourceKey="WorldTransform"/>
</Grid.RenderTransform>
<Grid.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<EventTrigger.Actions>
<BeginStoryboard Storyboard="{StaticResource MyStoryBoard}"/>
</EventTrigger.Actions>
</EventTrigger>
</Grid.Triggers>
<Button Height="20" Width="100"
Content="Blah">
</Button>
</Grid>
안녕하세요, 귀하의 솔루션에 귀하의 도움을 주셔서 감사합니다, 당신의 버튼을 TemplatedParent에 대한 번역을 수행 - 버튼 부모로 돌아 가야합니다. FindAncestor 작동 방식을 이해하지만 TemplatedParent와 함께 사용하는 방법을 모르겠습니다. 귀하의 예에서 버튼 대신 스토리 보드를 그리드에 적용하는 방법을 보여줄 수 있습니까? 도와 주셔서 감사합니다 –
문제는 없지만 제 대답을 편집했습니다. – Dabblernl
대단히 감사합니다. –