WPF积分效应问题:故事板动画扩展窗口的高度一个StackPanel(WPF Credits eff

2019-07-29 15:42发布

这是我的第一个WPF项目。 我试图让与堆叠在彼此的顶部垂直一堆的旗帜形PNG的滚动署名效果。

我目前的做法是有一堆在一个StackPanel图像。 每个图像是大约1024x150,且有大约30个图像。 它们垂直堆叠。

我开始在StackPanel的0,200,所以大部分是关闭屏幕。 然后我有把它翻译了Y轴,一路离屏故事板(在Blend创建)。 动画开始, 但问题是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 -我不认为有一个解决办法呢。

Answer 1:

我看到两件事情,你可以尝试一下:

  1. 使用与各地的StackPanel禁用一个滚动条的ScrollViewer。 可悲的是,你不能动画滚动直接抵消,所以你需要后面在代码中创建像一个计时器,并调用ScrollToVerticalOffset()定期。

  2. 尝试把StackPanel中在Canvas和动画,而不是RenderTransforms Canvas.Top(在StackPanel中集)。

如果你需要一个我会提供一个代码示例。

安德烈



Answer 2:

我同意安德烈,才使已禁用滚动条新的列表框类型。

您可以动画滚动偏移量,我知道了发生在一个自定义控件我正在写现在。 这是在类列表框的功能:


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

thisScrollViewer.BeginAnimation(HorizontalScrollOffsetProperty, animateHscroll);



文章来源: WPF Credits effect problem: StoryBoard to animate a StackPanel that extends the height of the window