如何为控件设置动画,使其像WPF中的羊皮纸卷轴一样展开?

时间:2009-04-09 15:17:13

标签: wpf animation

有没有人知道如何动画一个面板使它看起来像在WPF中的旧式羊皮纸卷轴中滚动一样?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

问题在于,这是一个相当复杂的动画,需要将控制的一部分反转并压缩而控制的其余部分不是。所以这不能通过简单的缩放或拉伸动画来回答。您可以在指向用户控件的VisualBrushes上使用多个动画,但在运行时交换这些内​​容会变得很复杂。

我建议您查看CodePlex上的Transitionals项目:

Transitionals Project

Transitionals包含许多不同类型的动画,其中一个可能足够接近你。如果没有,您可以查看过渡的构建方式,看看是否可以调整过渡以满足您的需求。

最后,最有效的方法是使用着色器。然而,着色器需要一些数学,并且是用HLSL(而不是C#)编写的。如果您有兴趣了解更多信息,我强烈建议您查看以下文章:

Writing custom GPU-based Effects for WPF

答案 1 :(得分:0)

你寻找的效果真的很复杂。但是一个简单的替代方案就是为高度/宽度设置动画 在此示例中,我为stackpanel设置了动画,但您可以将其替换为任何控件。

<StackPanel Name="myStackPanel">
...
    <StackPanel.Triggers>
        <EventTrigger RoutedEvent="StackPanel.MouseEnter">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="myStackPanel"
                                     Storyboard.TargetProperty="Height"
                                     To="100" Duration="0:0:1.0" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </StackPanel.Triggers>
</StackPanel>

您可能需要添加动画为5的第二个触发器(例如,在MouseLeave上)。动画为0可能会阻止MouseEnter事件。