2009-06-28 3 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> 

それは私のユーザーコントロールにズームインすると、ズームアウトアニメーションは動作しません。どんな助けもありがたい。
ありがとうございます。

答えて

4

アニメーションが値を保持しているため、トリガーが起動してもアニメーションが表示されません。 2つの別々のトリガーを持つ代わりに、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によく似ています。何らかの理由で、トリガーの順序のために起こっているように見えます。何らかの理由でお互いにハンドオフすることができず、ストーリーボードは優先順位が高いためUIで値を強制します。ストーリーボードを使用して、それがなぜ機能していないのかを明確にコメントするのではなく、単一のトリガーに移動する、または出口アクションで各ストーリーボードを明示的に停止することで、ストーリーボードが修正されます。 http://msdn.microsoft.com/en-us/library/ms743230.aspx – rmoore