2012-10-05 54 views
0

我試圖使用VisualStateManager來管理我的控件狀態。以下工作正常,並給我一個狀態之間的一秒鐘動畫。當我指定一個默認持續時間時,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失敗了,因爲我的目標是轉換本身。由於this question,雖然原因不明,我得到它的工作,而不是通過瞄準元素:

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

這只是我留下ThicknessAnimation,這還只是捕捉到的值。我已經爲此提出了another question,現在我已經縮小了問題的範圍。