Windows Phone 7常用的开发技巧&学习总结
2012-11-20 23:20
471 查看
现在WP7的中文学习资料还是非常的少,自己摸索Windows Phone 7有一阵子,现在与大家分享一些自己常用技巧和个人的学习总结,同时也作为自己学习资料,用到时方便查阅,由于个人学习能力和知识有限,如果有错误或者不好之处,欢迎大家拍砖纠正,同时欢迎大家共同交流。 1. ApplicationBar在其它事件中调用的方法 Applicatio
现在WP7的中文学习资料还是非常的少,自己摸索Windows Phone 7有一阵子,现在与大家分享一些自己常用技巧和个人的学习总结,同时也作为自己学习资料,用到时方便查阅,由于个人学习能力和知识有限,如果有错误或者不好之处,欢迎大家拍砖纠正,同时欢迎大家共同交流。
1. ApplicationBar在其它事件中调用的方法
ApplicationBar控件时windows phone 7上的一个菜单,一个ApplicationBar最多可包含四个按钮。如果还有额外的选项可以通过菜单项来添加,这些菜单项默认是不显示的。只有在点击菜单栏右侧的省略号(或省略号下方的区域)时才会显示出来。它传统的Windows程序的菜单的作用类似。
ApplicationBar相信在WP7开发的时候经常会用到,但在页面的其它控件的事件中,如果直接使用他x:Name进行调用,会出现问题....
假如前台代码有个ListBox里的项,我想实现点击某一项时,利用ApplicationBar有个删除按钮(appbarDelete)的删除事件进行删除,因此在未选择任何项时,默认是禁用的(IsEnabled="False"),但点击ListBox某一项激活了之后,该按钮就启用(IsEnabled="True")。
ApplicationBar代码如下:
ListBox前台接口如下:
ListBox的选中事件代码如下:
点击时会出现如下异常NullReferenceException:
这是因为ApplicationBar(ApplicationBarIconButton和ApplicationBarMenuItem)相关的类定义在Microsoft.Phone.Shell命名空间。与UIElement和FrameworkElement等常规Silverlight编程的类层次是完全分开的,严格说来ApplicationBar不是你的页面的可视化的一部分。
因此解决办法如下:
在Xaml构造函数初始化时,加入以下代码即可解决:
注意,一般ApplicationBar有四个按钮,由于这个示例,只有一个按钮。加入上面这句代码之后,就可以解决问题,当我解决之后,点击列表某一项,就激活了删除按钮,我点击删除,就可以删除当前这项信息,如下图:
选中之后状态:
2.IsolatedStorage本地存储的封装类
IsolateStorage是本地存储的实现,具体介绍大家可以查阅相关资料,本次直接从微软Demo封装代码中抽取出来,具体代码如下:
此外,如果你是Windows Phone OS 7.1版本的话,您需要手动添加System.Servicemodel.Web,否则你会出现未找到System.Runtime.Serialization.Json命名空间的错误。
4.NavigationService跳转页面方法和技巧
由于学习WP7才学Silverlight,因此对Silverlight的NavigationService.Navigate();方法特别好用,相当于Asp.net里面的Response.Redirect();,代码如下:
但是这个方法只能在Xaml的非构造函数里面使用,如果在构造函数里面使用的话,就会出现异常NullReferenceException:
异常信息如下:
这是很多童鞋可能会改为在xaml加载的函数Loaded="PhoneApplicationPage_Loaded"里面使用,但这个会先加载完成xaml页面,再进行跳转,显然不适合例如登录验证跳转这些方法,这是可以重写OnNavigatedTo()方法里面完成,解决办法如下:
这样就解决了页面加载前的跳转。
5.指定某个Xaml页面为默认启动页设置
最后因时间问题,太晚了,明天还要上班哦,囧...! 简单介绍一下WP7是如何修改默认启动页,这对初学者应该还是比较迷惑的,修改默认启动页设置在项目的Properties/WMAppManifest.xml文件里面找到如下节点:
例如我把MainPage.xaml改为LoginPage.xaml页面。
结束语:因太晚了,明天还要上班...... 相信很多童鞋都笑而不语,这叫晚啊?在这个时候都是会觉得还特别早,说不定还有很多童鞋在加班赶项目呢,但大家还是要提醒大家照顾好自己身体,注意好休息,所以暂时写这几个,以后在不断学习中还会写一些总结或者想法与大家交流,刚才说的几点由于我个人理解不透或者错误之处,请大家拍砖指正,在这凌晨的时候,跟大家说声“早安”!
原文地址:http://www.cnblogs.com/foolin/archive/2011/09/06/2168219.html
现在WP7的中文学习资料还是非常的少,自己摸索Windows Phone 7有一阵子,现在与大家分享一些自己常用技巧和个人的学习总结,同时也作为自己学习资料,用到时方便查阅,由于个人学习能力和知识有限,如果有错误或者不好之处,欢迎大家拍砖纠正,同时欢迎大家共同交流。
1. ApplicationBar在其它事件中调用的方法
ApplicationBar控件时windows phone 7上的一个菜单,一个ApplicationBar最多可包含四个按钮。如果还有额外的选项可以通过菜单项来添加,这些菜单项默认是不显示的。只有在点击菜单栏右侧的省略号(或省略号下方的区域)时才会显示出来。它传统的Windows程序的菜单的作用类似。
ApplicationBar相信在WP7开发的时候经常会用到,但在页面的其它控件的事件中,如果直接使用他x:Name进行调用,会出现问题....
假如前台代码有个ListBox里的项,我想实现点击某一项时,利用ApplicationBar有个删除按钮(appbarDelete)的删除事件进行删除,因此在未选择任何项时,默认是禁用的(IsEnabled="False"),但点击ListBox某一项激活了之后,该按钮就启用(IsEnabled="True")。
ApplicationBar代码如下:
<phone:PhoneApplicationPage.ApplicationBar> <shell:ApplicationBar IsVisible="True"> <shell:ApplicationBarIconButton x:Name="appbarDelete" IsEnabled="False" IconUri="/Assets/AppBar/delete.png" Text="删除" Click="appbarDelete_Click"/> </shell:ApplicationBar> </phone:PhoneApplicationPage.ApplicationBar>
ListBox前台接口如下:
<ListBox Name="messageList" SelectionChanged="messageList_SelectionChanged">
<ListBox.ItemTemplate> <DataTemplate> <!-- 这里省略 --> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
ListBox的选中事件代码如下:
privatevoid messageList_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (messageList.SelectedItem !=null) { appbarDelete.IsEnabled =true; //选中某项时激活ApplicationBar的删除按钮 } else { appbarDelete.IsEnabled =false; //未选中时禁用ApplicationBar的删除按钮 } }
点击时会出现如下异常NullReferenceException:
这是因为ApplicationBar(ApplicationBarIconButton和ApplicationBarMenuItem)相关的类定义在Microsoft.Phone.Shell命名空间。与UIElement和FrameworkElement等常规Silverlight编程的类层次是完全分开的,严格说来ApplicationBar不是你的页面的可视化的一部分。
因此解决办法如下:
在Xaml构造函数初始化时,加入以下代码即可解决:
public DemoPage() { InitializeComponent(); // Re-assign names already in the XAML file //解决按钮无法调用问题 appbarDelete =this.ApplicationBar.Buttons[3] as ApplicationBarIconButton; }
注意,一般ApplicationBar有四个按钮,由于这个示例,只有一个按钮。加入上面这句代码之后,就可以解决问题,当我解决之后,点击列表某一项,就激活了删除按钮,我点击删除,就可以删除当前这项信息,如下图:
选中之后状态:
2.IsolatedStorage本地存储的封装类
IsolateStorage是本地存储的实现,具体介绍大家可以查阅相关资料,本次直接从微软Demo封装代码中抽取出来,具体代码如下:
// ---------------------------------------------------------------------------------- // Microsoft Developer & Platform Evangelism // // Copyright (c) Microsoft Corporation. All rights reserved. // // THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, // EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES // OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. // ---------------------------------------------------------------------------------- // The example companies, organizations, products, domain names, // e-mail addresses, logos, people, places, and events depicted // herein are fictitious. No association with any real company, // organization, product, domain name, email address, logo, person, // places, or events is intended or should be inferred. // ---------------------------------------------------------------------------------- using System.IO; using System.IO.IsolatedStorage; using System.Runtime.Serialization.Json; using System.Text; namespace Foolin.Helper { public static class IsolatedStorageHelper { public static T GetObject<T>(string key) { if (IsolatedStorageSettings.ApplicationSettings.Contains(key)) { string serializedObject = IsolatedStorageSettings.ApplicationSettings[key].ToString(); return Deserialize<T>(serializedObject); } return default(T); } public static void SaveObject<T>(string key, T objectToSave) { string serializedObject = Serialize(objectToSave); IsolatedStorageSettings.ApplicationSettings[key] = serializedObject; } public static void DeleteObject(string key) { IsolatedStorageSettings.ApplicationSettings.Remove(key); } private static string Serialize(object objectToSerialize) { using (MemoryStream ms = new MemoryStream()) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(objectToSerialize.GetType()); serializer.WriteObject(ms, objectToSerialize); ms.Position = 0; using (StreamReader reader = new StreamReader(ms)) { return reader.ReadToEnd(); } } } private static T Deserialize<T>(string jsonString) { using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(jsonString))) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T)); return (T)serializer.ReadObject(ms); } } } }
此外,如果你是Windows Phone OS 7.1版本的话,您需要手动添加System.Servicemodel.Web,否则你会出现未找到System.Runtime.Serialization.Json命名空间的错误。
4.NavigationService跳转页面方法和技巧
由于学习WP7才学Silverlight,因此对Silverlight的NavigationService.Navigate();方法特别好用,相当于Asp.net里面的Response.Redirect();,代码如下:
this.NavigationService.Navigate(new Uri("/MyPage.xaml", UriKind.Relative));
但是这个方法只能在Xaml的非构造函数里面使用,如果在构造函数里面使用的话,就会出现异常NullReferenceException:
public LoginPage() { InitializeComponent(); //判断是否已经登录 if (Logic.UserLogic.IsLogin()) { this.NavigationService.Navigate(new Uri("/MyPage.xaml", UriKind.Relative)); } }
异常信息如下:
这是很多童鞋可能会改为在xaml加载的函数Loaded="PhoneApplicationPage_Loaded"里面使用,但这个会先加载完成xaml页面,再进行跳转,显然不适合例如登录验证跳转这些方法,这是可以重写OnNavigatedTo()方法里面完成,解决办法如下:
///<summary> /// 重写方法 ///</summary> ///<param name="e"></param> protectedoverridevoid OnNavigatedTo(NavigationEventArgs e) { //判断是否已经登录 if (Logic.UserLogic.IsLogin()) { this.NavigationService.Navigate(new Uri("/MyPage.xaml", UriKind.Relative)); } }
这样就解决了页面加载前的跳转。
5.指定某个Xaml页面为默认启动页设置
最后因时间问题,太晚了,明天还要上班哦,囧...! 简单介绍一下WP7是如何修改默认启动页,这对初学者应该还是比较迷惑的,修改默认启动页设置在项目的Properties/WMAppManifest.xml文件里面找到如下节点:
<Tasks> <DefaultTask Name ="_default" NavigationPage="LoginPage.xaml"/> </Tasks>
例如我把MainPage.xaml改为LoginPage.xaml页面。
结束语:因太晚了,明天还要上班...... 相信很多童鞋都笑而不语,这叫晚啊?在这个时候都是会觉得还特别早,说不定还有很多童鞋在加班赶项目呢,但大家还是要提醒大家照顾好自己身体,注意好休息,所以暂时写这几个,以后在不断学习中还会写一些总结或者想法与大家交流,刚才说的几点由于我个人理解不透或者错误之处,请大家拍砖指正,在这凌晨的时候,跟大家说声“早安”!
原文地址:http://www.cnblogs.com/foolin/archive/2011/09/06/2168219.html
相关文章推荐
- Windows Phone 7常用的开发技巧&学习总结
- JavaSE学习总结第11天_开发工具 & API常用对象1
- iOS开发之Xcode常用调试技巧总结
- iOS开发之Xcode常用调试技巧总结
- WEB前端开发中一些常用技巧总结
- 一个三年Android开发的总结-常用的git技巧与误区
- 前端开发中一些常用技巧总结
- Android常用开发学习网站总结
- Android 开发git学习,常用命令总结
- ios学习--iphone开发笔记和技巧总结(原址持续更新)
- Ubuntu学习总结-03 安装软件 & 技巧
- 前端开发中一些常用技巧总结
- java与.net比较学习系列(1) 开发环境和常用调试技巧
- iOS开发之Xcode常用调试技巧总结
- iOS开发之常用知识储备与开发技巧总结篇
- 【转载】MVC巧用枚举做权限管理 | NET开发中你可能会用到的常用方法总结 |学习 ASP.NET MVC
- iOS开发之Xcode常用调试技巧总结
- ios学习--iphone开发笔记和技巧总结(原址持续更新)
- 【IOS 开发学习总结-OC-36】★文件 I/O——NSFileHandle&NSURL&NSBundle
- Myeclipse学习总结(4)——Eclipse常用开发插件