一个实用的Metro滚屏效果示例

以前在Windows Phone7下开发时,对全景控件Panorama印象深刻,在Metro app中没有对应的控件,于是就尝试借鉴一下这种效果。
如果不熟悉Panorama,可以参见以下两张图片。

其中,我想完成的效果限于两点:
1.将页面中心区域移动到鼠标点击位置所在的控件或内容。
2.当前页面中能够看到右侧部分屏,增加体验效果。

示例内容:
假定一个登录/注册共用界面,左侧为登录,右侧为注册,默认居中显示登录,如果是新用户,则可以滚屏到注册,完成后切换回来继续登录。
为了示范效果,登录和注册的功能均省略(完整的功能还要考虑输入验证、业务逻辑云云),仅以界面布局为主。

最主要的动画效果代码:

private void TransitionAnimation()
{
    DoubleAnimation daRegister = new DoubleAnimation(); 
    daRegister.From = -gMain.Width / 2.0; ;
    daRegister.To = 0.0;
    daRegister.Duration = new Duration(TimeSpan.FromMilliseconds(300));
    daRegister.AutoReverse = false;
    Storyboard.SetTarget(daRegister, gMain);
    Storyboard.SetTargetProperty(daRegister, "(Canvas.Left)");
    sbRegister = new Storyboard();
    sbRegister.Children.Add(daRegister);

    DoubleAnimation daLogin = new DoubleAnimation();
    daLogin.From = 0.0;
    daLogin.To = -gMain.Width / 2.0;
    daLogin.Duration = new Duration(TimeSpan.FromMilliseconds(300));
    daLogin.AutoReverse = false;
    Storyboard.SetTarget(daLogin, gMain);
    Storyboard.SetTargetProperty(daLogin, "(Canvas.Left)");
    sbLogin = new Storyboard();
    sbLogin.Children.Add(daLogin);
}

从代码中可以明白,项目中创建了两个用户控件daLogin和daRegister,有固定宽度,借助动画使得主页面MainPage中的Canvas来回移动达到目标,
以下是执行效果的图片。

其实代码还算简单,如果想更丰富一下,可以通过鼠标和触点事件完成手势滚屏,也可以增加多个图片控件完成一组宣传内容的滚动,类似Metro版的EverNote,原理相同可以自行发挥。

项目源文件:下载

posted on 2012-06-28 12:44  Bean.Hsiang  阅读(1581)  评论(1编辑  收藏  举报