using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using System.ComponentModel;
using System.Windows.Media.Imaging; namespace PictureSlide
{
public partial class MainPage : PhoneApplicationPage
{
ImageFrameGroup FrameGroup;
/// <summary>
/// 当前项索引
/// </summary>
public int CurItemIndex { get; set; }
private List<string> ItemData;
/// <summary>
/// 滑动模式
/// </summary>
private TScrollMode ScrollMode = TScrollMode.EBack;
/// <summary>
/// 切换页面移动触发距离
/// </summary>
private const double KMinMoveLen = ;
// 构造函数
public MainPage()
{
InitializeComponent();
// --- 视图数据绑定
this.FrameGroup = new ImageFrameGroup();
this.CanvasImageView.DataContext = this.FrameGroup;
CurItemIndex = ;
ItemData = ImageData.GetImages(); LoadCurImageFrame();
} #region 载入三张图片
private void LoadCurImageFrame()
{
//检查索引合法性,防止快速滑动索引出问题。
CheckIndexValid();
Canvas.SetLeft(CanvasImageView, -);
FrameGroup.MidFrame = LoadImage(ItemData[CurItemIndex]);
if (DataModelNullOrEmpty(CurItemIndex - ))
{
FrameGroup.LeftFrame = LoadImage(ItemData[CurItemIndex - ]);
}
else
{
FrameGroup.LeftFrame = null;
}
if (DataModelNullOrEmpty(CurItemIndex + ))
{
FrameGroup.RightFrame = LoadImage(ItemData[CurItemIndex + ]);
}
else
{
FrameGroup.RightFrame = null;
}
} private ImageSource LoadImage(string ImagePath)
{
try
{
BitmapImage bitmap = new BitmapImage();
bitmap.UriSource = new Uri(ImagePath, UriKind.Relative);
return bitmap;
}
catch (Exception)
{
return null;
}
}
#endregion #region 数据的合法性
/// <summary>
/// 数组数据的合法性
/// </summary>
/// <param name="index"></param>
private bool DataModelNullOrEmpty(int index)
{
return index >= && index < ItemData.Count;
}
#endregion #region 检查图片索引合法性
private void CheckIndexValid()
{
if (CurItemIndex < )
{
CurItemIndex = ;
}
if (CurItemIndex >= ItemData.Count)
{
CurItemIndex = ItemData.Count - ;
}
}
#endregion #region 拖动图片
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void GestureListener_DragDelta(object sender, DragDeltaGestureEventArgs e)
{
if (CanvasImageView.Visibility == Visibility.Collapsed)
return;
double dLeft = Canvas.GetLeft(CanvasImageView);
Canvas.SetLeft(CanvasImageView, dLeft + e.HorizontalChange);
}
#endregion #region 拖动结束
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void GestureListener_DragCompleted(object sender, DragCompletedGestureEventArgs e)
{
if (CanvasImageView.Visibility == Visibility.Collapsed)
return;
double velocity = e.HorizontalChange; if (e.Direction != System.Windows.Controls.Orientation.Horizontal)
{
ScrollTo(TScrollMode.EBack, velocity);
}
else if (Math.Abs(velocity) < KMinMoveLen)
{
// --- 回滚
ScrollTo(TScrollMode.EBack, velocity);
}
else
if (e.HorizontalChange > )
{
// --- 前一张
if (DataModelNullOrEmpty(CurItemIndex - ))
{
ScrollTo(TScrollMode.EPreview, velocity);
}
else
{
ScrollTo(TScrollMode.EBack, velocity);
}
}
else
{
// --- 下一张
if (DataModelNullOrEmpty(CurItemIndex + ))
{
ScrollTo(TScrollMode.ENext, velocity);
}
else
{
ScrollTo(TScrollMode.EBack, velocity);
}
}
}
#endregion #region MyRegion
Storyboard storyBoardOperator;
public void ScrollTo(TScrollMode scrollMode, double velocity)
{
ScrollMode = scrollMode;
// --- 终点位置
double endPos = ;
switch (scrollMode)
{
case TScrollMode.EBack:
endPos = -;
break;
case TScrollMode.ENext:
endPos = -;
break;
case TScrollMode.EPreview:
endPos = ;
break;
} double timeSpan = 0.3;
// --- 启动滑动效果 // --- 启动滑动效果
if (storyBoardOperator == null)
{
storyBoardOperator = new Storyboard();
storyBoardOperator.Completed += new EventHandler(Storhboard_Completed);
}
else
{
storyBoardOperator.Stop();
storyBoardOperator.Children.Clear();
} storyBoardOperator.Children.Add(CreateDoubleAnimation(CanvasImageView, timeSpan, endPos, new PropertyPath(Canvas.LeftProperty)));
storyBoardOperator.Begin();
}
/// <summary>
/// 动画完成
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Storhboard_Completed(object sender, EventArgs e)
{
if (ScrollMode == TScrollMode.ENext && CurItemIndex < ItemData.Count - )
CurItemIndex++;
else if (ScrollMode == TScrollMode.EPreview && CurItemIndex > )
CurItemIndex--;
LoadCurImageFrame();
}
#endregion #region 开始拖动
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void GestureListener_DragStarted(object sender, DragStartedGestureEventArgs e)
{ }
#endregion #region MyRegion
public DoubleAnimation CreateDoubleAnimation(DependencyObject Dependobj, double timespan, double To, PropertyPath property)
{
DoubleAnimation doubleAnimation = new DoubleAnimation();
doubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(timespan));
Storyboard.SetTarget(doubleAnimation, Dependobj);
Storyboard.SetTargetProperty(doubleAnimation, property);
doubleAnimation.To = To;
return doubleAnimation;
}
#endregion
}
}

http://files.cnblogs.com/walleyekneel/WP7PictureSlide_ce130e98-d791-46e8-813d-865d7339aa6d.zip

wp7启动+幻灯片效果的更多相关文章

  1. javascript - 图片的幻灯片效果

    javascript 代码: <script type="text/javascript"> function select_play() { var select_p ...

  2. setTimeout应用 && 自动播放——幻灯片效果&& 自动改变方向——幻灯片效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. Codrops 教程:实现内容倾斜的 3D 幻灯片效果

    今天给大家分享的优秀教程来自 Codrops 网站,实现一个内容倾斜的 3D 幻灯片效果.我们平常见到的都是那种水平或者垂直滚动的效果,这个倾斜的内容滑动效果相信会让你眼前一亮.因为使用了 CSS 3 ...

  4. 【jquery】幻灯片效果

    闲着无聊,用Jquery写了一个幻灯片效果. 我这人喜欢造轮子,除了jquery这种有强大开发团队的框架级别JS,其实的一些小程序都是尽量自己写. 一是因为怕出问题了没人问,二是自己写的改起来也方便. ...

  5. bxSlider 在网页里添加幻灯片效果

    幻灯片效果在网页上很常见,本文介绍用 bxSlider 轻松实现的方法. bxSlider是什么 bxSlider 是用 JQuery 和 CSS 实现网页中幻灯片效果的工具.可在 http://bx ...

  6. css+js 控制幻灯片效果

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  7. 使用CSS实现一个简单的幻灯片效果

    方法一: 简单的CSS代码实现幻灯片效果 方法二: 使用CSS3 Animation来制作幻灯片 方法一: 简单的CSS代码实现幻灯片效果 话不多说,直接上代码 <!DOCTYPE html&g ...

  8. 纯css实现幻灯片效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  9. 一个很好的幻灯片效果的jquery插件--kinMaxShow

    在做一些网站时,或多或少的要给网站做幻灯片效果,以前每次做这个效果,都是现成带网上找,找到的很多很杂,而且用完后就不会再理会更加不会去总结代码. 无意中找到了kinMaxShow这个插件,机会满足了我 ...

随机推荐

  1. FPGA论剑(续)

    25年之后,第二次华山论剑之时,天下第一的王重阳已然仙逝,郭靖少年英杰刚过二十岁,接东邪黄药师.北丐洪七公300招不败,二人默认郭靖天下第一.南帝段智兴因为出家,法号“一灯”,早已看破名利,故没有参加 ...

  2. Linux Change The I/O Scheduler For A Hard Disk

    ow do I change the I/O scheduler for a particular hard disk without rebooting my Linux server system ...

  3. Secure CRT修改文件夹的颜色

    secureCRT有一个很大的问题是,如果设置Emulation Terminal 为Linux模式,则ls的时候,目录的蓝色跟背景的黑色非常接近,很难看清楚,修改办法 option->Glob ...

  4. python学习(七) 更加抽象

    python是面向对象的语言. 7.1 对象的魔力 7.1.1 多态 不管是字符串还是列表,count()函数都可以正常工作. >>> ['ab','b','c'].count('c ...

  5. highcharts钻取例子

    <!doctype html> <html lang="en"> <head> <script type="text/javas ...

  6. MySQL简述

    Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一. ...

  7. left join的多重串联与groupby

    有三张表或组合查询,f1,f2,f3,其中,f1分别与f2,f3是一对多关系,f1一条记录可能对应f2或f3中0条或多条记录 要创建一个查询,以f1为基准,即f1中有多少条记录,结果也就返回对应数量的 ...

  8. MFC 文件I/O和串行化

    1.枚举所有文件夹(递归) void EnumerateFolders () { WIN32_FIND_DATA fd; HANDLE hFind = ::FindFirstFile (_T (&qu ...

  9. 解决The JSP specification requires that an attribute name is preceded by whitespace问题

    笔者今天调试界面出现下边这个问题: The JSP specification requires that an attribute name is preceded by whitespace 经查 ...

  10. ansible命令详解

    查看ansible版本 import ansible print(ansible.__version__) 命令参数 -m:要执行的模块,默认为command -a:模块的参数 -u:ssh连接的用户 ...