Windows Phone 拾遗
1.URI:统一资源标识符,如:NavigationService.Navigate(new Uri("/Views/Music.xaml", UriKind.Relative)); Relative指相对路径,如/Views/Music.xaml,只是相对项目的路径,而相反的是Absolute,即绝对路径。
2.系统托盘即手机顶上电池、信号之类的一栏,是显示系统级别的状态信息。程序能隐藏和显示系统托盘,如:Microsoft.Phone.Shell.SystemTray.IsVisible = true;
3.应用程序栏是用于显示程序内一些通用操作的区域,即程序底部的,如“设置”之类的。要使用应用程序栏(Application Bar),不要使用自建的菜单系统。微软推荐使用系统默认的主题颜色,即白色前景色和透明背景。支持最多4个操作图标,但不是必须4个。系统提供了一些图标,在C:\Program Files\Microsoft SDKs\Windows Phone\v7.1\Icons里有。
4. 应用程序栏不支持数据绑定,要使其国际化本地化等等都得用C#。
5.透明度即在相应的xaml里设置Opacity的值,数值在0~1之间,如Opacity="1"。如果透明度小于1,Application Bar会覆盖原显示区域,但同时能看到原显示区域,数值越小越明显。如果透明度等于1,Application Bar会完全覆盖原显示区域。
6.Application Bar支持横屏,并且一定是显示在物理按钮的那方。当翻的时候会期自动显示动画效果,不用自己写。
7.Orientation:屏幕方向。Portrait:竖屏(直译是指“肖像”)。Landscape:横屏(直译是指“风景图”)。页面可以支持竖屏,横屏或者两者同时支持(PortraitOrLandscape)。如果建立的页面支持PortraitOrLandscape,当用户翻转手机时页面会自动改变屏幕方向。不能通过代码来在程序中临时改变屏幕方向,屏幕方向的改变只能由用户决定。可以强制页面只支持横屏、竖屏,如:SupportedOrientations="PortraitOrLandscape" 。 可以指定启动时的屏幕方向,如Orientation="Landscape"。
8.如果屏幕支持方向为PortraitOrLandscape,那么系统会随手机方向自动翻屏。如果重新布局页面,需要重写OrientationChanged。
9.在XAML里增加<LineBreak/>就会增加一空白行。<Run></Run>标签是格式化的标签,可以把文本放在Run标签下,通过Run可以给文字增加格式,如<Run Foreground="Red" FontSize="32">这是海龟</Run>可将字体设置成红色,大小为32。
10.Image控件是用于显示图片的控件,支持PNG和JPEG格式,支持网络文件和本地文件,本地文件属性中的Buile Action必须是Content(这样才会把图片压缩到xap里,而如果为Resource,则会弄到dll文件里。但是设为Content后不能在模拟器里显示)。
11.UI布局控件包括3种:Canvas(绝对定位控件,速度最快,比较少用,更多用于游戏,有可能重叠,Silverlight也可以用于游戏,休闲之类的),Grid(网格定位控件,有多少行多少列之类的,比较常用,推荐使用),StackPanel(自动定位控件,不能改变控件的定位,只能指定横排或竖排,如果全用它,灵活性太大,不能很好排版,推荐用于小区域,大的则不要用)。
12.MediaElement控件支持播放音频和视频,支持播放本地文件和网络文件,同Image控件一样,本地文件属性中的Build Action是Content。
13.隔离存储空间(Isolated Storage),即所有文件IO操作被限制在隔离存储空间里面(相当于局域网,网内不能访问网外,网外不能访问网内,完完全全与世隔绝)。在隔离存储空间里面可以增加、删除或修改目录和文件,自己有绝对的控制权,在隔离存储空间里面可以存储程序配置信息。
使用隔离存储空间涉及三个类:IsolatedStorageFile(文件类,用于操控隔离存储空间里面的目录(Directory)以及文件(File),进行增删改,查询是否存在等等);IsolatedStorageFileStream(用于读写操控隔离存储空间里面的文件流);IsolatedStorageSettings(用于存储程序配置信息的Dictionary)。
使用隔离存储空间需要引用两个命名空间:using System.IO.IsolatedStorage using System.IO;不需要引用其他DLL,与传统的文件IO操作类似。
14.隔离存储空间没有绝对路径,即没有C盘,D盘之类,没有根目录,必须使用用户的存储空间,如:using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())//GetUserStoreForApplication:为程序取出用户存储的目录、文件,是最重要的存储方法,所有要存储的目录文件都在这。。使用using是因为使用文件操作时的handler会把文件连接起来,using会隐式调用disposal(释放)函数,自动把那些资源释放
15.应用程序配置信息一般用于简单的配置信息,例如有key与value的对应。其实是隔离存储空间里面的字典(Dictionary)。可以直接把对象保存到应用程序配置信息里面(如as string, as user)。
16.WP下的隔离存储空间没有配额的限制,Silverlight可以无限制使用所有存储空间(物理空间)。但推荐只保存需要的信息,删除无用的信息;把数据同步到云端,减少本地存储,以免占用用户太多空间。
17.墓碑机制,即相当于人死后立个墓碑,然后上帝会把人挖出来审判,具体到手机上,即当按HOME键时就进入墓碑状态,再回来时原来的数据、状态等都还保存着不变。Launch和Closing事件表示启动和关闭,可以保存一些永久配置数据(persisted data)到隔离存储空间。Deactivated事件在当程序失去激活的时候调用,当程序关闭的时候不调用,使用PhoneApplicationSerevice.State保存一些临时数据(transient data)。Activated事件,当程序重新激活的时候调用,当程序启动的时候不调用,从PhoneApplicationService.State读取一些临时数据,恢复到用户离开该页面时候的状态,以保持用户体验的一致性。
18.10秒钟原则:微软限定任何程序操作(包括Startup, Exit, Return to application, Leaving an application)不能超过10秒钟,如果数据库太大读写时间长的话要注意别超过,不要把大数据在启动时读取。
19.页面显示状态:当程序重新激活时,要恢复页面原先的显示状态,用户应该看到和原先一模一样的页面(如TextBox的光标,ScrollViewer的位置, DeepZoom的图片大小),使用PhoneApplicationPage.State来保存和恢复页面显示状态。OnNavigatedTo,当页面进入时调用,可恢复页面显示状态。
20.应用程序不可以直接访问其他存储信息,如联系人信息等,也不可以直接调用其他功能,如电话和短信功能等。而启动器和选择器为应用程序提供了间接访问这些内置功能的方法,但要注意启动器和选择器运行时操作系统可能终止当前的应用程序,因不是所有程序退出前台时都会墓碑化,不过一般的都正常。使用时要加上using Microsoft.Phone.Tasks;//所有的启动器和选择器都在这个名字空间里。
21。启动器:启动一个内置的程序提供给用户使用,一旦发出信息,不会返回任何数据给调用的原程序,例如SearchTask(搜索任务),发出后就把所有主动权交给所启动的程序了。选择器:启动一个内置的应用程序提供给用户使用,会返回一些数据给调用的程序,如PhotoChooserTask(图片选择器),可以读到用户选择的图片。当用户完成操作时,调用程序会被重新激活,然后就能导入,接收到返回的数据;要注意,用户可能取消操作,这样会返回null值。
22.MSDN上How-To里有怎样使用的介绍,很详细。使用启动器:只需使用一个局部变量就能使用启动器,然后填上属性,就到再下一步了。使用选择器:要先在PhoneApplicationPage类里面定义一个Chooser的field;然后在PhoneApplicationPage的构造函数生成该Chooser的实例,同时注册Completed事件处理函数;实现Completed事件处理函数;调用Show()方法启动选择器。
23.启动器与选择器运行模式:(1)当启动启动器或选择器时,应用程序会进入失去激活状态(Deactivated),此时页面会触发OnNavigatedFrom事件,App会触发Deactivated事件,启动的内置程序(Task)会接管当前程序的控制权。当Task运行时,应用程序可能tombstoned(墓碑化),但大部分是可能不会tombstoned的(如PhotoChooserTask,CameraCaptureTask,MediaPlayerLauncher,EmailAddressChooserTask,PhoneNumberChooserTask,PhoneCallTask),如当调用CameraCaptureTask时,应用程序没有tombstoned,调用CameraCaptureTask完毕以后,参数传递给原有应用程序的实例,但是如果用户在运行CameraCaptureTask过程中导航到其他程序,如有电话打进来等,那么原有的应用程序还是会被tombstoned的。注意:PhoneCallTask是比较怪异的,启动后什么事也不干,即不tombstoned原程序,也不会去Deactivated,所以不调用激活与被激活函数。(2)当Task执行完毕后,原有应用程序会被重新激活,如果程序没有被tombstoned,那么还是运行原有的实例,否则被tombstoned后再运行,程序会运行在新的实例中。Task执行完后,不管有没有被tombstoned过,App都会触发Activated事件,页面会触发OnNavigatedTo事件。(3)应用程序再次激活的顺序:先调用Application_Activated()函数(在App.xaml中),再如果程序曾经被tombstoned的话,会调用页面的构造函数,再进行到Chooser的Completed事件处理函数,再然后,如果重载了OnNavigatedTo,会调用OnNavigatedTo()函数。是否tombstoned的区别:在于是否会调用App和页面的构造函数,如果tombstoned的话,操作系统之前已经把它杀死了,因此会调用,而如果没有则不会。因此程序逻辑最好不要放到构造函数,而是放到Application_Activated()和OnNavigatedTo()中恢复状态信息。
24.Panorama:全景;Pivot:中轴(类似寺庙里的转经筒,每次转动可以看到一部分)。这两个控件是为使应用程序更加容易导航和使用,呈现更丰富的内容。可以非常简单地使用XAML与API开发丰富的UI应用。完全支持数据绑定功能,也支持内容的模板与样式。自动支持系统的主题。内置滑动的动画效果(animations)内置帮助导航的触摸事件,如轻击(flick),平移(pan)等,不需要自己写代码处理这些事件。在最后一个item(项)继续平移时会自动重新回到第一个item。
25.Panorama:一般具有一幅大于屏幕大小的底图,也可以不放,但放了会更吸引用户。用户可以通过轻击和平移来选择不同的信息。呈现当前item时,同时也显示旁边item的一小部分信息。由于用户体验方面等原因,建议最多用4个item。在item Header那行后加上Orientation="Horizontal"可以呈现多于一屏的文本(手指左右 滑动即可),而Pivot控件是不行的。
26.Pivot:(1)同样的数据源通过不同形式呈现,例如Calendar hub(日历安排,各种议程)。(2)对一个数据源进行分类过滤呈现,例如email hub(分类出已读,未读邮件)。(3)代替Tab键,组织大类的信息在,例如System settings。(4)内容经过优化(如会自动换行),只显示在一屏里面,这也是前面说的和Panorma的区别之一。(5)最多用7个items(多于7样的东西比较难记)。
27.Panorama和Pivot比较:Panorama支持更丰富的用户体验;item可以设置屏幕方向为水平,并且支持多于一屏的显示;可以使用任意大小的背景图,Panorama会自动地缩放成合适大小;建议不要使用Application Bar,以免降低用户体验。Pivot:支持更多数量的items,注意最好最多用7个;能使用更多的空间来呈现数据(不必在当前item呈现下一item的一小部分内容);更加容易使用代码来操控,如SelectedIndex和SelectedItem可以用于Pivot,但不能用于Panorma;完全可以使用Application Bar。 注意:不要在Pivot控件里面存放Panorama控件;也不要在Panorama控件里面存放Pivot控件;不要使用这两个控件来做向导功能(Wizard)。
28.ScrollViewer 控件允许您在 UI 内容超出屏幕范围时滚动浏览 StackPanel 内容。
浙公网安备 33010602011771号