2009-06-28 106 views
1

我有一个用户控件,当我双击它时,我想让它放大,如果它还没有。如果是,那么双击将缩小它。我可以让它与代码一起工作,但我无法在xaml中使用它。 下面是该句柄的双击事件背后的代码。触发动画

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

然后在我的XAML:

<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> 

一旦放大了我的用户,变焦出动画不起作用。任何帮助赞赏。
谢谢。

回答

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 2009-06-29 13:47:31