WP7基础学习第七讲

wp7--7

(注:本节主讲WP7的全景视图和枢轴视图,两个很有用的控件,可以使程序做成一些特效!记录少了些,主要是如何添加Item)

1.Panorama全景视图控件
2.Pivot枢轴视图控件

Panorama:
1.简介:使用一个超过屏幕宽度的长水平画布,提供了独特显示控件、数据和服务的方式;是一种选项、导航和数据的多屏幕滚动菜单
2.结构:
  1.Background/2.Title/3.Items/4.Header
3.使用:
背景图片的高为800像素,宽度大于480像素,不超过2000像素

对于它的一个事件SelectionChange
panorama1.Title=((PanoramaItem)e.AddedItems[0].Header.ToString());

Pivot:(像TabControl)
1.简介:快捷管理应用中的视图或页面;过滤数据、视图分类
2.结构;
   1.Title/2.Header/3.PivotItem
3.使用:
Header文字不要过长,以免其他PivotItem中的Header无法显示;
在PivotItem中,不要使用ScrollViewer或ListBox这类带有手势的控件


对于它的一个事件SelectionChange
pivot.Title=((PivotItem)e.AddedItems[0]).Header.ToString();

WP7--8

(注:本节主要讲DeepZoom应用,因为项目没有到,也没怎么使用也没深究它,你如果感兴趣可以试试,很不错的图片处理)

DeepZoom基本知识:
源于遥感影像的金字塔显示方式;提供了与高分辨率图像进行交互的能力;可以快速缩放图像而不影响应用的性能;加载或平移图像时可以光滑过渡;spring animations

应用:高分辨率、极大图像的浏览;3D合成图像;广告
分类:Single;Collection

制作DeepZoom图像工具:DeepZoomComposer
地址:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=45TB17B7-52BF-4BDA-87A3-FA8A4673F8BF

MultiScaleImage

属于:
Source-Web Uri;UseSprings-springs animations;
ViewportOrigin-CenterPoint;ViewportWidth-ZoomLevel(级别)

事件:
ImageFailed;ImageOpenFailed;ImageOpenSucceeded

使用:
<MultiScaleImage x:Name="msi" Width="474" Height="652" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="6,0,0,0" Source="http://www.daisy123.com/MyDeepZoom/dzc_output.xml"/>

后台代码编写:
1.声明的变量:
private double zoom=1;
private bool inMoving=false;
private bool isDown=false;
private Point lastMouseDownPos=new Point();
private Point lastMousePos=new Point();
private Point lastMouseViewPort=new Point();

2.在ImageOpenSucceeded中,代码:
mri.ViewportOrign=new Point(0,0);
mri.ViewportWidth=1;

3.在Xaml中加载鼠标按下、鼠标移动、鼠标弹起事件
3.在鼠标左键按下事件中:
lastMouseDownPos=e.GetPorition(mri);
lastMouseViewPort=mri.ViewportOrigin;
isDown=true;

mri.CaptureMouse();

4.在鼠标移动事件中:
lastMousePos=e.GetPorition(mri);

if(isDown&&!isMoving)
{
 isMoveing=true;
 double w=mri.ViewportWidth;
 Point p=new Point(mri.ViewportOrigin.X,mri.ViewportOrigin.Y);
 mri.UseSpring=false;
 mri.ViewportOrigin=new Point(p.X,p.Y);
 mri.ViewportWidth=w;
 zoom=1/w;
 mri.UseSpring=true;
}
if(isMoving)
{
 Point point=lastMouseViewPort;
 point.X=(lastMouseDownPos.X- lastMousePos.X)/mri.ActualWidth*mri.ViewportWidth;
 point.Y=(lastMouseDownPos.Y- lastMousePos.Y)/mri.ActualWidth*mri.ViewportWidth;
 mri.ViewportOrigin=point;//可以平移
}

5.在鼠标左键抬起事件:
if(isMoving)
{
 bool isShift=(Keyboard.Modifiers & ModifierKeys.Shift) ==ModifierKeys.Shift;
 double newzoom=zoom;
 if(isShift)
  newzoom/=2;
 else
  newzoom*=2;

 Icon(newzoom,mri.EleamentToLogicalPoint(this.lastMousePos));
}

isMoving=false;
isDown=false;
mri.EeleameMouseCapture();
}

对于函数Icon://缩放
private void Icon(double zoomnew ,Point p)
{
 if(zoomnew<0.5)
  zoomnew=0.5;
 mri.IconAboutLogicalPoint(zoomnew/zoom,p.X,p.Y);
 zoom=zoomnew;
}
6.使用ApplicationBar四个按钮:full/Original/zoomin/zoomout
对于full按钮下的事件代码:
mri.IconAboutLogicalPoint(1.5,0,0);
对于Original按钮下的事件代码:
this.mri.ViewportWidth=1;
this.mri.ViewportOrigin=new Point(0,0);
对于zoomin按钮下的事件代码:
Zoom(zoom*1.3,mri.EleamentToLogicalPoint(new Point(0.5*mri.ActualWidth,0.5*mri.ActualHeight)));
对于zoomout按钮下的事件代码:
Zoom(zoom/1.3,mri.EleamentToLogicalPoint(new Point(0.5*mri.ActualWidth,0.5*mri.ActualHeight)));

原文地址:https://www.cnblogs.com/SanMaoSpace/p/2137476.html