0

我在 wpf 中实现了一个图形动画,并参考了附加的图片(显然我不是艺术家......)。正方形代表可见形式,而整个图像代表从页面转换到页面的画布。动画从右侧的 1->2->3->4->1 和左侧的 4->3->2->1->4 滚动和环绕。

正如您从图片中的彩色箭头中看到的那样,我之前的实现允许我使用与所需图片相同的前后门廊。当动画移动到正面或背面图片时,使用瞬时动画在用户不知情的情况下快速移动到真实页面。

到目前为止,这效果很好并且非常顺利。问题在于我的实现不仅仅是简单的图像。每个页面本身都会有复杂的动画。使用相同的实现,我必须镜像 4 个真实页面中的每个动画,就像我必须在仅存在平滑动画滚动的最后页面中一样。

显然,由于许多原因,这将是非常浪费和不理想的......

我的一个想法是从首页 1 和 4 创建一个图像,并使用另一个画布将该图像覆盖在前后门廊上。但这似乎仍然太难了,应该有更简单的方法。

有没有比这更受欢迎或更简单的方法?我正在寻找某种可以模仿其他画布的画布,这样我就不必担心这个了。要么是那个,要么是一个全新的算法来包裹最后的页面。

我已经在互联网上查看了这个滚动例程,但还没有找到任何东西。感谢您的任何帮助!对不起,很长的帖子。

在此处输入图像描述

4

1 回答 1

0

看起来我通过使用 VisualBrush 并将其绑定到画布找到了我的问题的答案。

    <Canvas Name="backgroundCanvas" Visibility="Visible"  Height="{StaticResource animHeight}" Width="6144">

        <Canvas Name="menuFrontCanvas" Visibility="Visible" Margin="0,0,0,0" Height="{StaticResource animHeight}" Width="{StaticResource animWidth}">
            <Rectangle HorizontalAlignment="Left" VerticalAlignment="Top" Width="{StaticResource animWidth}" Height="{StaticResource animHeight}">
                <Rectangle.Fill>
                    <VisualBrush Visual="{Binding ElementName=menu4Canvas}" />
                </Rectangle.Fill>
            </Rectangle>
        </Canvas>

        <Canvas Name="menu1Canvas"  Visibility="Visible" Margin="1024,0,0,0" Height="{StaticResource animHeight}" Width="{StaticResource animWidth}">
            <Image Name="alpsLogoImage" Canvas.ZIndex="99"  Stretch="None" HorizontalAlignment="Left" VerticalAlignment="Top" Visibility="Visible" 
                IsEnabled="True" StretchDirection="Both" Source="WPFResources/ALPSLogo.png" />
            <Image Name="menu1Image" Stretch="None" HorizontalAlignment="Left" VerticalAlignment="Top"
                IsEnabled="True" StretchDirection="Both" Source="WPFResources/Backgrounds/menu1Image.png" />
        </Canvas>

        <Canvas Name="menu2Canvas" Visibility="Visible" Margin="2048,0,0,0" Height="{StaticResource animHeight}" Width="{StaticResource animWidth}">
            <Image Name="menu2Image" Stretch="None" HorizontalAlignment="Left" VerticalAlignment="Top"
                IsEnabled="True" StretchDirection="Both" Source="WPFResources/Backgrounds/menu2Image.png" />
        </Canvas>

        <Canvas Name="menu3Canvas" Visibility="Visible" Margin="3072,0,0,0" Height="{StaticResource animHeight}" Width="{StaticResource animWidth}">
            <Image Name="menu3Image" Stretch="None" HorizontalAlignment="Left" VerticalAlignment="Top"
                IsEnabled="True" StretchDirection="Both" Source="WPFResources/Backgrounds/menu3Image.png" />
        </Canvas>

        <Canvas Name="menu4Canvas" Visibility="Visible" Margin="4096,0,0,0" Height="{StaticResource animHeight}" Width="{StaticResource animWidth}">
            <Image Name="menu4Image" Stretch="None" HorizontalAlignment="Left" VerticalAlignment="Top"
                IsEnabled="True" StretchDirection="Both" Source="WPFResources/Backgrounds/menu4Image.png" />  
        </Canvas>

        <Canvas Name="menuBackCanvas" Visibility="Visible"   Margin="5120,0,0,0" Height="{StaticResource animHeight}" Width="{StaticResource animWidth}">
            <Rectangle HorizontalAlignment="Left" VerticalAlignment="Top" Width="{StaticResource animWidth}" Height="{StaticResource animHeight}">
                <Rectangle.Fill>
                    <VisualBrush Visual="{Binding ElementName=menu1Canvas}" />
                </Rectangle.Fill>
            </Rectangle>
        </Canvas>

    </Canvas>
于 2013-04-23T14:35:33.320 回答