2012-10-05 4 views
0

VisualStateManager를 사용하여 제어 상태를 관리하려고합니다. 다음은 잘 작동하고 상태 사이에 1 초의 애니메이션을 제공합니다.기본 기간을 지정하면 VisualStateManager가 망가집니다.

<VisualStateManager.VisualStateGroups> 
    <VisualStateGroup Name="EditStates"> 

     <!-- Default transition time commented out 
     <VisualStateGroup.Transitions> 
      <VisualTransition GeneratedDuration="0:0:2"></VisualTransition> 
     </VisualStateGroup.Transitions>--> 

     <VisualState Name="Normal"> 
      <Storyboard> 
       <ThicknessAnimation Storyboard.TargetName="ViewBorder" 
        Storyboard.TargetProperty="Margin" To="0"/> 
       <DoubleAnimation Storyboard.TargetName="HeaderTransform" 
        Storyboard.TargetProperty="ScaleY" To="0" /> 
      </Storyboard> 
     </VisualState> 

     <VisualState Name="Editing"> 
      <Storyboard> 
       <ThicknessAnimation Storyboard.TargetName="ViewBorder" 
        Storyboard.TargetProperty="Margin" To="100,0,100,100"/> 
       <DoubleAnimation Storyboard.TargetName="HeaderTransform" 
        Storyboard.TargetProperty="ScaleY" To="1" /> 
      </Storyboard> 
     </VisualState> 

    </VisualStateGroup> 
</VisualStateManager.VisualStateGroups> 

그러나 2 초 애니메이션 시간을 설정하려고 시도하는 전환 코드의 주석을 제거하면 눈부신 정도가 올라갑니다.

이 때 "편집"이 설정됩니다

  • DoubleAnimation 스냅을 1로 즉시, 아니 애니메이션.
  • ThicknessAnimation 2 초 대기 후, "정상"이 설정되면

초 1 이상에 애니메이션 아니오 애니메이션,

  • ThicknessAnimation 스냅 즉시 0.
  • DoubleAnimation은 2 초 동안 대기 한 다음 1 초가 넘는 시간 동안 움직입니다.

도대체 무슨 일이 일어 났는지 설명 할 수 있습니까?

특정 샘플처럼 모든 애니메이션에 Duration="0" 설정을 시도했지만 작동하는 애니메이션이 제거됩니다. 나는 여전히 2 초의 지연을 얻었고, 그 다음에 애니 메이팅보다는 스냅을했다.

답변

0

글쎄, 나는 이것이 GeneratedTransition과 관련이 없다는 것을 충분히 알았습니다. 나는 단지 VisualStateManager이 좋아하지 않는 두 개의 애니메이션을 사용하기에는 불행했습니다.

우선, VisualStates의 애니메이션은 Duration="0"이되어야합니다. 이것은 정상 상태이기 때문에이되어야합니다. 나는 그것이 주들 사이에 어떤 종류의 애니메이션을 얻는 유일한 방법 이었기 때문에 그들을 제거하고있었습니다. 그러나 실제로 보았던 것은 정상 상태 기간 (즉, 이후의 전환, 따라서 기본 전환 길이를 추가했을 때의 일시 중지 이후의 애니메이션)입니다.

내가 위의 사실을 깨달은 유일한 이유는 ColorAnimation을 추가 한 것이므로 효과가있었습니다.

DoubleAnimationLayoutTransform.ScaleY인데, 변환 자체를 대상으로했기 때문에 실패했습니다.

<DoubleAnimation Storyboard.TargetName="Header" To="0" Duration="0" 
Storyboard.TargetProperty="(FrameworkElement.LayoutTransform).(ScaleTransform.ScaleY)" /> 

이는 여전히 값에 스냅됩니다 내 ThicknessAnimation을, 잎 : 이유를 알 수 있지만 감사 this question에, 나는 대신 요소를 대상으로 작업을 얻었다. 나는 이것을 위해 another question을 올렸습니다. 문제를 좁혔습니다.

관련 문제