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前世今生(四)

    前几期我们一直介绍FPGA内部资源,今天我们将用最后的篇幅来介绍剩下的内部资源部分,结束我们FPGA的前世今生.之所以起名字为FPGA前世今生,其实就是介绍一下FPGA内部资源,前世的内部结构资源就不 ...

  2. MySQL模式匹配(LIKE VS REGEXP)

    3.3.4.7. 模式匹配 MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi.grep和sed的扩展正则表达式模式匹配的格式. SQL模式匹配允许你使用“_”匹配任何单个字符, ...

  3. Informatica PowerCenter下载地址

    https://edelivery.oracle.com/EPD/Download/get_form?egroup_aru_number=12854075

  4. python使用pika链接rabbitmq Connection reset by peer 解决办法

    记录一下, 最近在用机器学习打算做一个Rest API, 数据存入mongo,任务采用消息队列,rabbitmq 由于引擎采用python编写,所以WEB也直接打算用python编写了,比较省事. W ...

  5. Python Twisted系列教程13:使用Deferred新功能实现新客户端

    作者:dave@http://krondo.com/deferred-all-the-way-down/  译者:杨晓伟(采用意译) 你可以从这里从头阅读这个系列. 介绍 回忆下第10部分中的客户端5 ...

  6. fiddler代理hosts配置

    1 需求背景 fidder开启后,C:\Windows\System32\drivers\etc\hosts配置失效问题:fiddler本身代理hosts配置表,修改后,可以省去在手机等代理使用者的系 ...

  7. Postgresql VACUUM COPY等

    1.VACUUM VACUUM回收dead tuples占用的存储空间. 在一般的PostgreSQL操作中,被update操作删除或废弃的元组不会从物理表中删除; 它们一直存在,直到执行VACUUM ...

  8. Axure RP的基础使用

    Axure RP是一个专业的快速原型设计工具. 在上面可以直接设计软件的原型而且不涉及代码,例如设计软件的流程和界面之类的.简单的说,就是可以在上面编写界面,让人看起来像一个完整的软件一样. 设置完成 ...

  9. Mycat实战之主键数据库自增方式

    创建一个 person表,主键为Id,hash方式分片,主键自增(采用数据库方式) #person表结构如下 Id,主键,Mycat自增主键 name,字符串,16字节最长 school,毕业学校,数 ...

  10. ubuntu14.10下Qt5.4无法输入中文

    最近学习Qt,于是在ubuntu下安装了开发环境.我是从官网上下载安装的Qt5.4版本.安装后发现在开发过程中无法输入中文.于是在网上搜了搜.解决办法如下: 1.安装fcitx-frontend-qt ...