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. Svn使用遇到的错误

    1. 权限不足导致的错误

  2. CORS跨域资源共享漏洞

    CORS漏洞其中已经存在很久了,但是国内了解的人不是很多,文章更是少只有少,漏洞平台也没有此分类. 在DefConChina之后写了一篇算是小科普的文章. 定义CORS,Cross-Origin Re ...

  3. java成神之——date和calendar日期的用法

    date和calendar日期的用法 util的data转换成sql的data 创建Date对象 格式化 Instant ChronoUnit LocalTime LocalDate LocalDat ...

  4. python写一个能生成三种一句话木马的脚本

    代码: import time import os from threading import Thread import optparse def aspyijuhua(): try: juy=op ...

  5. MVC原理图解

    注解: 视图中通过Action方法向控制器请求数据 控制器通过view()方法向视图呈现数据

  6. leetcode609

    public class Solution { public IList<IList<string>> FindDuplicate(string[] paths) { Dict ...

  7. 一只小蜜蜂(斐波那契dp)

    有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行.请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数. 其中,蜂房的结构如下所示. Input输入数据的第一行是一个整数N,表示测试实例的个数,然后是 ...

  8. Vulkan Tutorial 09 图像与视图

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 使用任何的VkImage,包括在交换链或者渲染管线中的,我们都需要创建VkImage ...

  9. Timer的缺陷

  10. Flask+gevent 异步 WEB 架构

    :first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; m ...