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)));