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. 88EE1111 PHY芯片设置

    本次调试88EE1111 PHY芯片之主要目的主要对应为了将其默认的GMII接口通过配置成RGMII接口.因此,可能本文档涉及到的内容并没有涉及到PHY芯片的88EE1111所有内容. PHY芯片管理 ...

  2. Perl参考函数/教程

    这是标准的Perl解释器所支持的所有重要函数/功能的列表.在一个函数中找到它的详细信息. 功能丰富的 Perl:轻松调试 Perl Perl脚本的调试方法 perl 入门教程 abs - 绝对值函数 ...

  3. 1132 Cut Integer

    题意:略. 思路:注意除数可能为0的情况,不然会导致浮点错误. 代码: #include <iostream> #include <string> using namespac ...

  4. 关于ESXI能虚拟出多少个虚拟机和CPU的关系

    当你的虚拟机报如下错误的时候: esxi5.0版本最高配置: https://www.vmware.com/content/dam/digitalmarketing/vmware/zh-cn/pdf/ ...

  5. 3 SpringBoot与微服务

    SpringBoot的使用? 化繁为简: Spring MVC 需要定义各种配置,配置文件多. SpringBoot的核心功能? 独立运行: java -jar XXX.jar (以前启动SPring ...

  6. 使用airodump-ng扫描网络

    执行命令 root@sch01ar:~# airodump-ng wlan0mon 参数介绍: BSSID:表示无线AP的Mac地址 PWR:网卡报告的信号水平 Beacons:无线AP发出的通告编号 ...

  7. 解决maven构建工程错误:Failure to transfer org.apache.maven.plugins:maven-jar-plugin:pom:2.4 from错误

    问题描述: mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=myapp -DarchetypeArtifactId=ma ...

  8. subprocess模块和logging模块

    主要内容: 一.subprocess模块 二.logging模块 1️⃣  subprocess模块 三种执行命令的方法 subprocess.run(*popenargs, input=None, ...

  9. android 记录所有打开的Activity,退出程序

    android 记录所有打开的Activity,退出程序   package com.main.server; import java.util.LinkedList; import java.uti ...

  10. laravel tinker测试模型添加属性

    php artisan tinker 新建一个模型对象 $post=new \App\Posts(); 给对象的属性挨个赋值 $post->title="this is title&q ...