WPF -

2009-12-02 5 views
1

가 나는 변환 및 지역 자원으로 스토리 보드를 설정 한 다른 로컬 리소스에 영향을 스토리 보드 얻을 수는 없지만 나는 다음과 같은 오류 얻을 버튼에서 스토리 보드를 실행할 때WPF -

을 { " 'WorldTranslation'이름 'System.Windows.Controls.Button'의 이름 범위에서 찾을 수 없습니다. "}

사람이 올바른 방향으로 제발 포인트?

<Window.Resources> 

    <Transform3DGroup x:Key="WorldTranslation"> 
     <RotateTransform3D> 
      <RotateTransform3D.Rotation> 
       <AxisAngleRotation3D x:Name="myAngleRotation" Axis="0,1,0" Angle="0" /> 
      </RotateTransform3D.Rotation> 
     </RotateTransform3D> 
    </Transform3DGroup> 

    <Storyboard x:Key="MyStoryboard"> 
     <DoubleAnimation 
      Storyboard.TargetName="WorldTranslation" 
     Storyboard.TargetProperty="(Transform3DGroup).(RotateTransform3D).(RotateTransform3D.Rotation).(AxisAngleRotation3D.Angle)" 
     From="0" 
     To="360" 
     Duration="0:0:1" 
     /> 
    </Storyboard> 

</Window.Resources> 

그리고 heres는 버튼 XAML ...

<Button Height="20" Width="100"> 
    <Button.Content>Blah</Button.Content> 
     <Button.Triggers> 
      <EventTrigger RoutedEvent="Button.Click"> 
       <EventTrigger.Actions> 
        <BeginStoryboard Storyboard="{StaticResource MyStoryboard}" > 

        </BeginStoryboard> 
       </EventTrigger.Actions> 
      </EventTrigger> 
     </Button.Triggers> 
    </Button> 

답변

7

는 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> 
+0

안녕하세요, 귀하의 솔루션에 귀하의 도움을 주셔서 감사합니다, 당신의 버튼을 TemplatedParent에 대한 번역을 수행 - 버튼 부모로 돌아 가야합니다. FindAncestor 작동 방식을 이해하지만 TemplatedParent와 함께 사용하는 방법을 모르겠습니다. 귀하의 예에서 버튼 대신 스토리 보드를 그리드에 적용하는 방법을 보여줄 수 있습니까? 도와 주셔서 감사합니다 –

+0

문제는 없지만 제 대답을 편집했습니다. – Dabblernl

+0

대단히 감사합니다. –