2013-12-13 45 views
1

我創建了一個簡單的動畫來顯示我的網格,當點擊一個按鈕 這個想法是使用窗口大小的實際高度,並使動畫從0到實際高度 但由於用戶然後將調整大小窗口,我想將高度從實際高度改回自動 但是,grid1的高度無法修改(不僅僅是auto,即使像600這樣的確切值也不起作用)動畫完成後,任何人都知道爲什麼?謝謝WPF網格高度的動畫

XAML

<Grid Name="grid_Main"> 
    <Grid Background="Aqua" Height="0" HorizontalAlignment="Left" Margin="68,39,0,10" Name="grid1" VerticalAlignment="Top" Width="361" > 
     <ScrollViewer> 
     <Border Height="200" /> 
     </ScrollViewer> 
    </Grid> 
    <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="214,258,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" /> 
</Grid> 

CS

private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     double actualHeight = grid_Main.ActualHeight;//grid_Main.RowDefinitions[1].ActualHeight; 
     DoubleAnimation animation = new DoubleAnimation(0, actualHeight, TimeSpan.FromSeconds(1)); 
     animation.Completed += new EventHandler(animation_Completed); 
     grid1.BeginAnimation(Rectangle.HeightProperty, animation); 
    } 

    void animation_Completed(object sender, EventArgs e) 
    { 
     grid1.Height = Double.NaN; 
     grid1.VerticalAlignment = System.Windows.VerticalAlignment.Stretch; 
     grid1.Width = 200; 
    } 

回答

0

你需要在animation_Completed開始以清除現有的動畫:

grid1.BeginAnimation(Rectangle.HeightProperty, null); 

你也應該得到進入hab在你設置你的動畫之前要做到這一點,以確保你不會結束其他動畫中的內存泄漏,儘管它們不再播放,但仍然可能綁定到該屬性。

+0

這真的有幫助!謝謝 – swivan