2016-02-26 150 views
0

我正在嘗試使用動畫摺疊/展開網格,並在動畫時移動所有其他組件。展開/摺疊網格

到目前爲止我用

<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Margin" Storyboard.TargetName="GridName"> 
    <DiscreteObjectKeyFrame KeyTime="0:0:0.59" Value="0,0,0,0" /> 
    (...more frames) 
</ObjectAnimationUsingKeyFrames > 

但是效果遠遠可接受(動畫不平滑)。如果新控件有這樣的選項,我是在徘徊?我也遇到了一些擴展/摺疊ListViews - 但它們不適用於包含數據。

編輯:我試着動畫的高度屬性 - 但沒有發生(沒有錯誤和沒有可見的結果)。我的代碼如下:

<Storyboard x:Name="MainImageSlideOut"> 
     <DoubleAnimation Duration="0:0:1" To="0" 
          Storyboard.TargetProperty="Height" 
          Storyboard.TargetName="Grid" 
          EnableDependentAnimation="True"/> 

</Storyboard> 
<Storyboard x:Name="MainImageSlideIn"> 
     <DoubleAnimation Duration="0:0:1" To="250" 
          Storyboard.TargetProperty="Height" 
          Storyboard.TargetName="Grid" 
          EnableDependentAnimation="True"/> 

</Storyboard> 

.... 

<Grid Background="#171717"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="*"></RowDefinition> 
    </Grid.RowDefinitions> 

    <Grid Grid.Row="1" 
      Height="250" 
      x:Name="Grid" 
      Background="#202020" />    

    <ScrollViewer Grid.Row="2"> 
    ... 
    </ScrollViewer> 

</Grid> 

回答

1

我在我的應用程序中有類似的功能。
我用它是通過使用這裏的ScaleTransform方式是一個例子:

<Storyboard x:Key="gridLoading"> 
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="IAmGroot"> 
     <EasingDoubleKeyFrame KeyTime="0" Value="0"/> 
     <EasingDoubleKeyFrame KeyTime="0:0:1" Value="1"> 
      <EasingDoubleKeyFrame.EasingFunction> 
       <CubicEase EasingMode="EaseOut"/> 
      </EasingDoubleKeyFrame.EasingFunction> 
     </EasingDoubleKeyFrame> 
    </DoubleAnimationUsingKeyFrames> 
    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="IAmGroot"> 
     <EasingDoubleKeyFrame KeyTime="0" Value="0"/> 
     <EasingDoubleKeyFrame KeyTime="0:0:1" Value="1"/> 
    </DoubleAnimationUsingKeyFrames> 
</Storyboard> 

這將加載從屏幕中間的網格,展開以適合屏幕大小。
如果您想要對所有元素執行動畫,那麼這個動畫將執行該操作,但是如果您需要不同的行爲,則可能需要單獨處理Grid中的項目的動畫。
HTH

+0

Il看起來很完美 - 但在網格下方,我試圖進行動畫處理,還有另一個網格應該採用當前網格的位置。不幸的是,它沒有。兩個網格都位於主網格內,其中第一個爲自動定義,第二個爲*。 –

+0

爲此的一種方法是操縱其中一個網格的高度,然後另一個將自動調整其自身以適合內容,這意味着只有一個動畫而不是2個。網格是否在同一行? – XAMlMAX

+0

否 - 它們是不同的行 –