4

我有一个客户要求将动画/平移图像添加到他们的网站。基本上,这是一个标准尺寸的图像,他想把它放在一个稍微窄一点的框架中,并让图像从左到右平移作为他网站上的视觉元素。无需点击和拖动;它基本上只是一个从左到右的动画平移,然后从另一张图片重新开始。

这是一个 .NET 页面,我有一堆 Silverlight 书籍,我打算学习它。我认为现在和任何时候一样好,因为现在我实际上可以使用它。作为记录,我是一名经验丰富的 .NET 开发人员,但除了阅读几本书的前几章之外,我并没有过多地使用 Silverlight。

所以...第一个问题,我假设这可能与 Silverlight 有关,我错了吗?

第二个问题,如果我能做到,有人能指出我正确的方向吗?就需要什么功能/控制/技术来做到这一点?我正在阅读深度变焦,但这似乎不是我想要的。我只需要获取一个标准尺寸的 jpeg/gif/whatever 文件,让它从左到右慢慢平移。为了做到这一点,我需要学习/花一些时间学习什么 Silverlight 功能?

4

3 回答 3

5

这当然是可行的。本质上,您将在画布上放置一个图像,并且您将处理该画布上的 MouseMove 事件。当鼠标从一侧移动到另一侧时,您将对图像应用平移以将其从一侧移动到另一侧。

以下代码应该可以帮助您入门:

将带有图像的画布添加到 MainPage.xaml(注意 MouseMove/Enter/Leave 事件)

<Canvas x:Name="LayoutCanvas" MouseMove="LayoutCanvas_MouseMove" MouseEnter="LayoutCanvas_MouseEnter" Height="200" Width="200">
     <Image x:Name="imgToMove" Source="myimage.png" />
</Canvas>

在后面的代码中,添加 MouseMove/Enter/Leave 事件

    Point lastMousePos = new Point();
    Point currentMousePos = new Point();
    double amountToMove = 1;
    private void LayoutCanvas_MouseMove(object sender, MouseEventArgs e)
    {
        currentMousePos = e.GetPosition(LayoutCanvas);
        if (lastMousePos.X > currentMousePos.X)
        {
            amountToMove--;
        }
        else
        {
            amountToMove++;
        }
        imgToMove.SetValue(Canvas.LeftProperty, amountToMove);
        lastMousePos = currentMousePos;
    }

    private void LayoutCanvas_MouseEnter(object sender, MouseEventArgs e)
    {
        lastMousePos = e.GetPosition(LayoutCanvas);
    }

    private void LayoutCanvas_MouseLeave(object sender, MouseEventArgs e)
    {
        imgToMove.SetValue(Canvas.LeftProperty, (double)0);
    }

你完成了。现在,当您将鼠标移到图像上时,图像将从左向右或从右向左平移。当您离开图像时,它会回到原来的位置。

于 2010-05-04T21:31:26.433 回答
0

我认为你可以做到。阅读您书中有关动画的章节,您将了解如何轻松移动图像。并阅读有关在像 Canvas 这样的布局面板中定位像 Image 这样的控件。

于 2010-03-09T22:26:40.073 回答
0

您正在寻找的东西称为投影变换。

一些很好的来源是:

Jaime Rodriguez 的Silverlight 3 PlaneProjection Primer

PlaneProjection 的 MSDN 文档

Jeff Paries的 Foundation Silverlight 3 动画第 7 章

基本上你要做的是创建一个沿 Y 轴应用旋转的动画。

于 2010-03-10T14:22:38.417 回答