`

wp7学习笔记 之二

    博客分类:
  • WP7
 
阅读更多

4)可以选中一个控件然后再在控件里添加子控件
5)新建时间线、可以选择不同的关键帧,在关键帧处设置控件属性变化的目标值。
6)可以将Brush等转换为资源,这样可以服用,类似于CSS。可以设置一个画刷,然后点击旁边的小方块图标,选择“转换为新资源”,保存的时候可以保存为UserControl中还是单独的文件中,类似于在htm中声明样式和单独的css中声明样式。一旦转换为资源,就可以在“画笔资源”面板中选择了。

 

45、SL控件包含Parts、States Model两部分,Parts就是子控件。StatesModel包含:Visual States(控件在不同状态下显示的效果)、Visual State Groups(为有互斥效果的控件提供的,相同的Visual State Groups是互斥的,不同的Visual State Groups是不互斥的)、Visual Transition(视觉状态转换时切换动画效果)。
1)快速设置控件的Visual State的方法:绘制Ellipse等图形,然后点击右键选择“构成控件(Make Into Control)”,然后选择要修改的控件即可。假设选择的是Button控件,这时候编辑器就进入了按钮的Templates编辑器,这时候设计器中的修改都是反映到Button的Template中的,要想退出需要点击设计器左上角的“[Button]”,想再次继续则需要选中按钮,然后点击设计器左上角的“Template”,也可以点击控件,右键选择“编辑模板”→“Editi Current”。
2)如果设置了“构成控件(Make Into Control)”,则默认所有状态都是一个样子,点击按钮将不会有效果,可以修改不同的状态的样子。编辑控件的Template进入Template编辑模式,选择“状态(States)”面板中的“Pressed”,调整控件的大小或者颜色,这样就可以设置按钮按下的样式了。
3)除了可以用“构成控件(Make Into Control)”修改控件之外,也可以在控件上点击右键,选择“编辑模板(Edit Template)”→“编辑副本(Edit Copy)”来修改Template。
4)应用已有样式模板的方法,点击控件、右键“编辑模板”→“引用资源”
5)控件之间状态转换的时候是瞬间切换的,如果想要动画转换效果,则需要在状态上点击“添加过渡”按钮添加过渡效果,需要设置过渡时间,注意Normal和Pressed之间一般不能直接转换,因为还隔着一个MouseOver呢。
6)可以用自定义Visual State技术来自定义ProgressBar,因为可以在State内部也是用动画,这样就可以实现Indeterminate状态下一个心脏跳来跳去的效果或者一个星星一闪一闪的效果。

46、WP7没有提供直接操作SMS、Phone、Email、Camera等的API,需要通过Task来执行,因此无法批量操作、免界面操作。当Task启动后,自己的应用程序就会被终止,通过Tombstone机制再次唤起自己的程序,并需要维护相关的状态。
47、Task:
1)PhoneCallTask用来拨号,主要两个属性:DisplayName、PhoneNumber,调用Show方法即可启动。
2)SmsComposeTask用来打开系统SMS程序,并且设置所要发的短信内容和发送人,可以发送彩信,但是只能发图片和摄像头拍照,不能发送声音和视频。Body、To两个属性。
3)SavePhoneNumberTask用来调用联系人程序,将电话号码保存到选中的联系人或者新建联系人。属性:PhoneNumber,事件Completed,无法设置联系人的姓名,必须用户手工填写。
4)PhoneNumberChooserTask用来打开联系人界面,选择一个联系人的号码。在Completed事件中获得选择的号码。
5)EmailComposeTask用来发邮件。EmailAddressChooserTask用来选择邮件地址。SaveEmailAddressTask。
6)PhotoChooserTask用来调用图片程序选择图片,并可以进行裁切。ShowCamera用来控制是否显示拍照程序,PixelWidth、PixelHeight属性设置裁切的大小,Completed事件用来监听选择完成事件。Completed事件中e.ChosenPhoto获得选中图像的流。

BitmapImage img = new BitmapImage();
img.SetSource(e.ChosenPhoto);
image1.Source = img;

需要注意PhotoChooserTask不能声明为局部变量,必须声明为类成员。因为启动照相机以后应用就被结束了,因此如果在按钮Click事件中如下写:

PhotoChooserTask task = new PhotoChooserTask();
task.Completed += new EventHandler<PhotoResult>(task_Completed);
task.PixelHeight = 100;
task.PixelWidth = 100;
task.ShowCamera = true;
task.Show();

task_Completed事件不会正确触发的,因为再次回来已经不是上次引用程序的实例了,因此需要如下编写:
PhotoChooserTask task = new PhotoChooserTask();
public MainPage()
{
InitializeComponent();
task.Completed += new EventHandler<PhotoResult>(task_Completed);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
task.PixelHeight = 100;
task.PixelWidth = 100;
task.ShowCamera = true;

task.Show();
}

也就是把注册Completed监听放到构造函数中,这样程序重启启动以后如果是从照相机返回的事件就会被触发。
注:这是旧SDK的Bug,新SDK已经没有这个问题。

7)CameraCaptureTask用于启动拍照程序,同样响应Completed事件。
8)MediaPlayerLauncher用来调用系统的MediaPlayer程序播放本地或者Web的媒体。模拟器上无法播放Video。
9)WebBrowserTask用来在浏览器中打开URL,只要设定URL属性即可。
10)SearchTask用来启动搜索程序,设置SearchQuery属性。

48、WP7应用程序只支持在前台执行,如果一个程序在你的程序正在运行的时候启动,程序收到一个将要被终止的事件通知。在程序关闭状态下,可以通过WebService来向程序发送信息以及更新程序状态,这叫PushNotification。
49、Tombstone课执行模式:Tombstoning、PageState、ApplicationState、PersistentData、TransientState。Tombstoning、TransientState下模拟多任务,在Tombstone模式下,应用被操作系统终止,就需要保存TransientState,以便于应用程序复活后恢复应用原状态。应用程序Lifecycle包括Launching、Running、Closing、Deactivating、Activating这五种运行状态,在App.xaml.cs中影响这些事件。Deactivating、Activating就是Tombstone下的运行态。通过PhoneApplicationService来保存状态信息。
可以在Page中override OnNavigatedFrom、OnNavigatedTo方法来保存、恢复状态。
实现保存文本框中用户正在输入的值的代码:

protected override OnNavigatedFrom(e)
{
PhoneApplicationService.Current.State["Test"] = textbox1.Text;
base.OnNavigatedFrom(e);
}

protected override OnNavigatedTo(e)
{
if(PhoneApplicationService.Current.State.ContainsKey("Test"))
{
textbox1.Text = PhoneApplicationService.Current.State["Test"] as string;
}
base.OnNavigatedTo(e);
}

50、PushNotification的几个概念:TileNotification可以改变QuickLauchArea内的图标内容(图片、文字等)的方式,需要程序被Pin to Start。ToastNotification在屏幕的提示栏中显示内容,点击提示栏可以打开应用程序。RawNotification可以用Http方式来接收通知,不可见,以后台方式传送通知。WP7上只能有15个PushNotification,如果多个程序都有PushNotification能力,则有的程序可能运行不正常。详细看视频。
51、Microsoft.Phone.Info.UserExtendedProperties获得用户信息,目前只能获得一个用于MarketPlace的ANID。DeviceExtendedProperties用来获取设备信息,可以取道的信息如下:http://msdn.microsoft.com/en-us/library/ff941122(v=vs.92).aspx

52、Microsoft.Devices.Sensors.Accelerometer可以获取传感器信息。主要用于游戏开发。todo:开发一个重力传感器模拟器。
Accelerometer am = new Accelerometer();
Accelerometer.ReadingChanged+=....;
am.Start();
am.Stop();

53、System.Device.Location命名空间下有获得定位数据的类。
watcher = new GeoCoordinateWatercher(GeoPositionAccuracy.Default);
watcher.MovementThreshold=35;
watcher.PositionChanged+=....

54、Microsoft.Devices.Radio下的FMRadio类是收音机设备。因为只有一个收音机,因此是单件模式。todo:作品,带SNS功能的网络收音机,能显示这个频率的电台名。能听友在线交流。
FMRadio radio = FMRadio.Instance;
radio.CurrentRegion = RadioRegion.Europe;
radio.Frequency = 100.5;
radio.PowerMode = RadioPowerMode.On;

55、Microsoft.Devices下的VibrateController可以控制振动器。
VibrateController vc = VibrateController.Default;
vc.Start(TimeSpan.FromMilliseconds(100));//设置震动时间。
vc.Stop()

56、可以用Reactive Extension来实现模拟设备数据(重力、位置等),参考WebCast20101214am_设备开发.zip
57、XNA是基于Managed DirectX的游戏开发环境。
58、即使不开发游戏,也可以使用XNA中的一些类。在WP7中使用XNA的时候需要使用定时器定时的执行FrameworkDispatcher.Update()以驱动XNA,否则可能会报错,一般如下调用:
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(50);
timer.Tick += (sender, e) => { FrameworkDispatcher.Update(); };
timer.Start();

(1)用SoundEffect来播放wav格式的音频。
SoundEffect sound = new SoundEffect(stream.ToArray(),SampleRate,AudioChannels.Mono);
SoundEffectInstance inst = sound.CreateInstance();
inst.Play();
wav格式文件可以以资源的形式放到程序中。

Windows Phone7或者SL中加载一个资源的方法,以加载wav文件为例:首先将wav文件的“Build Action”属性设置为“Embedded Resource”,假设文件名为Speech Off.wav放到项目根目录下:
嵌入资源的名字一般是“Assembly名字.文件夹名.文件名”,如果忘了的话可以用assembly.GetManifestResourceNames()方法获得所有的资源名。使用string asmName = new AssemblyName(Assembly.GetExecutingAssembly().FullName).Name获得当前Assembly的名字,不能用Assembly.GetExecutingAssembly().GetName() 方法取,因为会报错。

string asmName = new AssemblyName(Assembly.GetExecutingAssembly().FullName).Name;
using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(asmName+".Speech Off.wav"))
{
SoundEffect sound = new SoundEffect(ReadFully(stream), 48000, AudioChannels.Mono);
SoundEffectInstance inst = sound.CreateInstance();
inst.Play();
}
public static byte[] ReadFully(Stream stream)
{
byte[] buffer = new byte[32768];
using (MemoryStream ms = new MemoryStream())
{
while (true)
{
int read = stream.Read(buffer, 0, buffer.Length);
if (read <= 0)
return ms.ToArray();
ms.Write(buffer, 0, read);
}
}
}

(2)Song类播放mp3等格式的音乐,可以播放背景音乐
Song song = Song.FromUri("MyMusic",new Uri("Media/TestMusic.mp3",UriKind.Relative));
MediaPlayer.Play(song);
MediaPlayer类功能非常丰富,提供了播放列表、进度报告、播放状态事件等,完全可以用来做一个播放器。Song类也提供了获得专辑、声道等的方法。
(3)Microphone类(Microsoft.Xna.Framework.Audio)可以调用麦克风录音,buffer是wav格式的,可以直接传给SoundEffect播放

Microphone m = Microphone.Default;
m.BufferReady+=...()=>{m.GetData(buffer);};
m.Start();
m.Stop();

private byte[] ReadAllData(Microphone m)
{
List<byte> list = new List<byte>();
byte[] buffer = new byte[1024];
int readlen;
while ((readlen = m.GetData(buffer)) > 0)
{
if (readlen < buffer.Length)
{
list.AddRange(buffer.Take(readlen));
}
else
{
list.AddRange(buffer);
}
}
return list.ToArray();
}

(4)与用户交互的方法:手势和触控。位于Microsoft.Xna.Framework.Input和Microsoft.Xna.Framework.Input.TouchPanel下。
触控状态只有Move、Press、Release三种。

TouchCollection touchState = TouchPanel.GetState();
foreach(TouchLocation location in toucheState)
{

}

TouchPanel.GetState()不是阻塞的,因此要在DispatchTimer中不断的读取获取触控状态。

手势的编程:
TouchPanel.EnabledGestures = GestureType.Flick|GestureType.VerticalDrag;//设置程序要监听的手势类型。
定时器中不断的读取手势:
if(TouchPanel.EnabledGestures!=GestureType.None&&TouchPanel.IsGestureAvailable)//只有IsGestureAvailable=true才能ReadGesture
GestureType t = TouchPanel.ReadGesture().GestureType;

59、Properties下的WMAppManifest.xml中的Capabilities节点下定义的是程序要求的访问权限,应该保持权限最小。DefaultTask定义的是启动页面。

案例作品:微博客户端、网站客户端、youku客户端、邻讯

本文来自杨中科的博客,原文地址:http://www.cnblogs.com/rupeng/archive/2011/02/10/1950699.html

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    WP7校园课程管理源码20121119

    WP7校园课程管理源码 源码描述: 本软件汇集了作业编辑,课程安排,上课笔记和活动通知,方便了你的校园学习生活。 软件分为四个模块:课程表,作业本,笔记本,通知。 1.课程表:根据周期的不同显示当天的课程,并在...

    wp7 故事书 小例子

    一个用wp7做的小demo 通过这个你可以学习到 访问资源文件的方式 导航 传参的方式

    传智播客_国内首家微软WP8.1移动开发课程_WP81页面导航源码和笔记

    学习Widows Phone8.1的移动开发,需要C#基础、.Net平台基础、WPF(Silverlight)基础、移动互联网开发理念,已经非常好的英文读写能力,对于我们技术屌丝来说非常痛苦,传智播客为此专门安排了Windows Phone8.1开发...

    Qt基础学习笔记

    实现了对于iOS的完全支持,新增WinRT、Beautifier等插件,废弃了无Python接口的GDB调试支持,集成了基于Clang的C/C++代码模块,并对Android支持做出了调整,至此实现了全面支持iOS、Android、WP,它提供给应用程序...

    传智播客_国内首家微软WP8.1移动开发课程_WP81常用控件源码和笔记

    学习Widows Phone8.1的移动开发,需要C#基础、.Net平台基础、WPF(Silverlight)基础、移动互联网开发理念,已经非常好的英文读写能力,对于我们技术屌丝来说非常痛苦,传智播客为此专门安排了Windows Phone8.1开发...

    hibernate的详细学习笔记

    ®]w(ǦWPíìvÇ) 1myeclipseêCAHibernate!D«§(§t.uQ!Qì+!jar§i@m  i¨wtm !1 ) hibernateØÝsM|´ñhibernate.cfg.xmlD«(oj 1f#D«äÃ) UÏ7wgìªÂ.uQ° bóHibernatew¥îJÃH° ...

    传智播客_国内首家微软WP8.1移动开发课程_WP81开发简介与XAML语法源码和笔记

    学习Widows Phone8.1的移动开发,需要C#基础、.Net平台基础、WPF(Silverlight)基础、移动互联网开发理念,已经非常好的英文读写能力,对于我们技术屌丝来说非常痛苦,传智播客为此专门安排了Windows Phone8.1开发...

    re学习笔记(56)WUSTCTF – Re方向WP

    新手一枚,如有错误(不足)请指正,谢谢!! WUSTCTF-re-Cr0ssFun IDA64载入,进入main函数 查看check函数 ...下载下来压缩包有两个文件,一个是ELF64位,一个是output.txt是程序的输出 ... unsigned int i,flag[] = ...

    jQuery学习笔记之创建DOM元素

    利用DOM方法创建元素节点,通常要将document.createElement()、document.createTextNode()、appendChild()... var oNewP2 = document.createElement(“p”);  var oText = document.createTextNode(“这是使用javas

    WP7校园课程管理

    WP7校园课程管理源码,本软件汇集了作业编辑,课程安排,上课笔记和活动通知,方便了你的校园学习生活。软件分为四个模块:课程表,作业本,笔记本,通知。1.课程表:根据周期的不同显示当天的课程,并在不同周期添加...

    传智播客_国内首家微软WP8.1移动开发课程_WP81布局源码和笔记

    学习Widows Phone8.1的移动开发,需要C#基础、.Net平台基础、WPF(Silverlight)基础、移动互联网开发理念,已经非常好的英文读写能力,对于我们技术屌丝来说非常痛苦,传智播客为此专门安排了Windows Phone8.1开发...

    viewpager的学习笔记

    viewpager的学习 最近做了一个图片轮播,记录自己的学习过程,避免遗忘 viewpager的简单介绍 Viewpager,视图翻页工具,提供了多页面切换的效果。Android 3.0后引入的一个UI控件,位于v4包中。低版本使用需要导入v4...

    MyCNBlogs:我的cnblogs和学习笔记

    WP_CNBlogs:   :see-no-evil_monkey: :frog: :panda: :horse_face: :spouting_whale: 程序猿学习资料集邮(Program ape learning materials)  编程学习中经常要访问一些网站找资料,为了以后便于查找,在这里做下...

    WordPress开源免费博客笔记类主题–theme-Document

    theme-Document 是一款一个基于文档类型的博客主题,愈加便当的记载、查询学习笔记,专为做笔记而开发的wordpress主题。 作为一个程序员,在日常的工作、生活、学习的过程中根本都有很多需求做笔记的中央;做笔记的...

    wp独立存储空间案例

    本篇的学习笔记,我利用Android 的存储特色使用Windows Phone 7 的 IsolatedStorageSettings 类模仿了一个类似 Android 存储机制的DEMO,希望这个小DEMO能对你有所帮助 详细说明:...

    ExtJs 学习笔记 Ext.Panle Ext.TabPanel Ext.Viewport第1/3页

    通过此文能学习到如下内容 1.创建一个简单的面板 Ext.Panel 2.制作一个可以拖动的面板 Ext.Panel 3 .使用选项卡面板 3.使用Ext.Viewport搭一个简单布局(用一个小例子来总结本文所有内容) 面板是ExtJs控件的基础,很...

    wptv:WordPress插件,可将相关视频带入wp-admin

    该WPTV插件,旨在帮助用户更好地学习,理解并通过提供相关的,情境影片利用WordPress管理 。 这些视频将根据用户当前正在查看的屏幕动态显示,并在上下文帮助菜单中可用。 笔记 此插件正在积极开发中。 绝对欢迎拉取...

    asp.net知识库

    VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析Asp.Net2.0中的Callback机制 使用 Web 标准生成 ASP.NET 2.0 Web 站点 ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf...

    bugkctf 代码审计.md

    学习的笔记,方便平时查看,bugkct代码审计的wp,可以将我自己的见解分享给大家,使大家少走点弯路

Global site tag (gtag.js) - Google Analytics