2009-06-28 5 views
1

두 번 클릭 할 때 줌인하고 싶으면 사용자 콘트롤이 있습니다. 그럴 경우 두 번 클릭하면 축소됩니다. 난 뒤에 코드와 함께 작동하도록 할 수 있지만 xaml에서 작동하도록 할 수는 없다. 핸들의 더블 클릭 이벤트 뒤에있는 코드는 다음과 같습니다. 다음 내 XAML에서트리거 애니메이션

void MyObjectMouseDoubleClick(object sender, MouseButtonEventArgs e) 
    { 
     if (IsZoomedIn) 
     { 
      IsZoomedIn = false; 
      //ZoomOutAnimation(); 
     } 
     else 
     { 
      IsZoomedIn = true; 
      //ZoomInAnimation(); 
     } 
    } 

는 :

<UserControl.RenderTransform> 
    <TransformGroup> 
     <RotateTransform /> 
     <ScaleTransform /> 
     <TranslateTransform /> 
    </TransformGroup> 
</UserControl.RenderTransform> 

<UserControl.Style> 
    <Style> 
     <Style.Triggers> 
      <Trigger Property="local:MyObject.IsZoomedIn" Value="False"> 
       <Trigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Storyboard.TargetProperty="(UserControl. 
          RenderTransform).(TransformGroup.Children)[1]. 
          (ScaleTransform.ScaleX)" To="1" Duration="0:0:.3" /> 
          <DoubleAnimation Storyboard.TargetProperty="(UserControl. 
          RenderTransform).(TransformGroup.Children)[1]. 
          (ScaleTransform.ScaleY)" To="1" Duration="0:0:.3" /> 
         </Storyboard> 
        </BeginStoryboard> 
       </Trigger.EnterActions> 
      </Trigger> 
      <Trigger Property="local:MyObject.IsZoomedIn" Value="True"> 
       <Trigger.EnterActions>   
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation Storyboard.TargetProperty="(UserControl. 
         RenderTransform).(TransformGroup.Children)[1]. 
         (ScaleTransform.ScaleX)" To="2" Duration="0:0:.3" /> 
         <DoubleAnimation Storyboard.TargetProperty="(UserControl. 
         RenderTransform).(TransformGroup.Children)[1]. 
         (ScaleTransform.ScaleY)" To="2" Duration="0:0:.3" /> 
        </Storyboard> 
       </BeginStoryboard> 
       </Trigger.EnterActions> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</UserControl.Style> 

내 UserControl을으로 확대되면 축소 애니메이션이 작동하지 않습니다. 어떤 도움을 주셔서 감사합니다.
감사합니다.

답변

4

애니메이션이 값을 보유하고 있으므로 트리거가 실행 중이더라도 두 번째 애니메이션이 나타나지 않습니다. 두 개의 별도 트리거가있는 대신 EnterActions를 사용하는 것처럼 Trigger.ExitActions를 사용할 수 있습니다.

<Trigger Property="IsZoomedIn" 
     Value="True"> 
    <Trigger.EnterActions> 
     <BeginStoryboard> 
      <Storyboard > 
       <DoubleAnimation Storyboard.TargetProperty="(UserControl.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleX)"  
           To="2" 
           Duration="0:0:.3" /> 
       <DoubleAnimation Storyboard.TargetProperty="(UserControl.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleY)" 
           To="2" 
           Duration="0:0:.3" /> 
      </Storyboard> 
     </BeginStoryboard> 
    </Trigger.EnterActions> 
    <Trigger.ExitActions> 
     <BeginStoryboard> 
      <Storyboard> 
       <DoubleAnimation Storyboard.TargetProperty="(UserControl.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleX)" 
           To="1" 
           Duration="0:0:.3" /> 
       <DoubleAnimation Storyboard.TargetProperty="(UserControl.RenderTransform).(TransformGroup.Children)[1].(ScaleTransform.ScaleY)" 
           To="1" 
           Duration="0:0:.3" /> 
      </Storyboard> 
     </BeginStoryboard> 
    </Trigger.ExitActions> 
</Trigger> 
+0

감사! 하지만 여전히 코드가 작동하는 이유를 이해하지 못합니다. EnterActions가 "사실"이고 ExitActions가 "기타"와 더 비슷하기 때문에이 방법으로 생각하는 것이 "옳은"것이 아니라는 것을 알고 있습니다.
감사합니다. – jkidv

+0

EnterActions 및 ExitActions는 Initialize 및 Dispose와 유사하고 if/else와 유사합니다. 트리거의 순서로 인해 * 발생하는 것으로 보이는데, 이유는 무엇 때문에 서로에게 전달할 수 없으며 스토리 보드는 우선 순위가 높기 때문에 UI에서 값을 강제합니다. 스토리 보드를 사용하여 스토리 보드를 사용하여 왜 작동하지 않는지에 대해 명확하게 논평 할 수는 없지만 단일 트리거로 이동하거나 종료 조치에서 각 스토리 보드를 명시 적으로 중지하면 해결됩니다. http://msdn.microsoft.com/en-us/library/ms743230.aspx – rmoore