2009-07-05 45 views
0

這是我的第一個WPF項目的高度,一個StackPanel。我試圖通過一堆垂直疊放在彼此頂部的橫幅形PNG來獲得滾動信用效果。WPF積分效應問題:故事板動畫擴展窗口

我目前的做法是有一堆在一個StackPanel圖像。每張圖片大約爲1024x150,大約有30張圖片。它們垂直堆疊。

我開始在StackPanel的0,200,所以大部分是關閉屏幕。然後我有一個StoryBoard(在Blend中創建),它將它翻轉爲Y軸,一直在屏幕外。動畫開始,但問題是StackPanel中的一部分原本關屏從來沒有油漆,並保持切斷。只有StackPanel動畫的最初可見區域。

感覺就像StackPanel的需要重新繪製。這種方法是行得通還是需要做一些完全不同的事情?

XAML,省略窗口和Window.Triggers:

<Window.Resources> 
    <Storyboard x:Key="sb_HR"> 
     <DoubleAnimationUsingKeyFrames 
        BeginTime="00:00:00" 
        Storyboard.TargetName="StackPanel1" 
        Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)"> 
      <SplineDoubleKeyFrame KeyTime="00:00:30" Value="-1950"/> 
     </DoubleAnimationUsingKeyFrames> 
    </Storyboard> 
</Window.Resources> 


<Grid x:Name="LayoutRoot"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="1024" /> 
    </Grid.ColumnDefinitions>   
    <StackPanel Name="StackPanel1" Margin="0,0,0,0" RenderTransformOrigin="0.5,0.5"> 
     <StackPanel.RenderTransform> 
      <TransformGroup> 
       <ScaleTransform ScaleX="1" ScaleY="1"/> 
       <SkewTransform AngleX="0" AngleY="0"/> 
       <RotateTransform Angle="0"/> 
       <TranslateTransform X="0" Y="0"/> 
      </TransformGroup> 
     </StackPanel.RenderTransform> 
     <Image Margin="0,50,0,0" Source="title.png" x:Name="title" Height="150" VerticalAlignment="Top" Stretch="Uniform"></Image> 
     <Image Margin="0,50,0,0" Source="1.png" x:Name="V1_L1" Height="150" VerticalAlignment="Top" Stretch="Uniform" ></Image> 
     <Image Margin="0,50,0,0" Source="2.png" x:Name="V1_L2" Height="150" VerticalAlignment="Top" Stretch="Uniform" ></Image> 
     <Image Margin="0,50,0,0" Source="3.png" x:Name="V1_L3" Height="150" VerticalAlignment="Top" Stretch="Uniform" ></Image> 
     <Image Margin="0,50,0,0" Source="4.png" x:Name="V1_L4" Height="150" VerticalAlignment="Top" Stretch="Uniform" ></Image> 
     <Image Margin="0,50,0,0" Source="5.png" x:Name="V1_L5" Height="150" VerticalAlignment="Top" Stretch="Uniform" ></Image> 
     <Image Margin="0,50,0,0" Source="6.png" x:Name="V1_L6" Height="150" VerticalAlignment="Top" Stretch="Uniform" ></Image> 
     <Image Margin="0,50,0,0" Source="7.png" x:Name="V1_L7" Height="150" VerticalAlignment="Top" Stretch="Uniform" ></Image> 
     <Image Margin="0,50,0,0" Source="8.png" x:Name="V1_L8" Height="150" VerticalAlignment="Top" Stretch="Uniform" ></Image> 
    </StackPanel> 
</Grid> 

編輯:我發現ClipToBounds,並試圖將其設置爲false,但它已經是假的。有人在MSDN上有和我一樣的問題,在http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/5764645e-cb4f-4137-a525-4e8698ee43b6 - 我不認爲還有解決方案。

回答

2

我看到兩件事情,你可以嘗試一下:

  1. 使用的ScrollViewer與各地的StackPanel禁用滾動條。令人遺憾的是,您無法直接爲滾動偏移量設置動畫,因此您需要在後面的代碼中創建類似計時器的內容,並定期調用ScrollToVerticalOffset()。

  2. 嘗試將StackPanel放置在畫布上並使Canvas.Top動起來(在StackPanel上設置)而不是RenderTransforms。

我會提供一個代碼示例,如果你需要的話。

安德烈

2

我與安德烈同意,才使已禁用滾動條新的列表框類型。

您可以動畫滾動偏移量,我知道了發生在一個自定義控件我正在寫現在。這是一個函數的類列表框:


Duration animationDuration = new Duration(new TimeSpan(0, 0, 0, 0, _scrollSpeed)); 
DoubleAnimation animateHscroll = new DoubleAnimation(thisScrollViewer.HorizontalOffset, TargetHorizontalOffset, animationDuration); 

thisScrollViewer.BeginAnimation(HorizontalScrollOffsetProperty, animateHscroll);