在开发Windows Phone的项目中,需求中有几个页面是要用表格来布局的(效果图如下),由于Grid中有的边线是虚的,而且没有边线,果断放弃了,用了border将表格的线加上去了。于是在有表格布局的页面,感觉很耗新能。在512M内存的手机上测试也不影响什么,于是就上传到商店了。现在想起来,WP8不是可以用HTML5编程么?于是就写了个DEMO来测试HTML的使用方法。

跟WinForm一样,WP也有WebBrowser这个浏览器的框,所以可以在页面上加个WebBrowser来作为HTML的容器,然后将对应的HTML页面显示在里面。

1、在VS2012中新建一个HTML5的项目

2、新建项目后看解决方案结构

(vs会自动创建一个默认的HTML5程序示例,供开发者参考)

3 、将我们要制作的表格放到一个HTML页面中去

  1. <div>
  2. <table border="1">
  3. <tr>
  4. <td class="td-title">企业名称</td>
  5. <td id="com"></td>
  6. </tr>
  7. <tr>
  8. <td class="td-title">企业法人</td>
  9. <td id="name"></td>
  10. </tr>
  11. <tr>
  12. <td class="td-title">法人电话</td>
  13. <td id="phone"></td>
  14. </tr>
  15. <tr>
  16. <td class="td-title">企业所在地</td>
  17. <td id="adress"></td>
  18. </tr>
  19. <tr>
  20. <td class="td-title">备案号</td>
  21. <td id="ipc"></td>
  22. </tr>
  23. </table>
  24. <p id="jianjie"></p>
  25. </div>

如何填充数据呢?→Ajax。但是如何动态的获取数据呢?每个信息的id如何穿进去呢?就要看下一步了。

如果不想用Ajax,也可以直接将HTML代码加载到WebBrowser中。具体的看文章结尾的分享。

4、进行JavaScript和C#,C#和JavaScript交互了。

如果能够像Asp.Net一样后台像前台HTML附加数据,或者传出对应的Id号该有多好啊,可惜WP毕竟不是Asp.Net。如果你访问的url(本地HTML)是加参数的话,那么用JavaScript可以直接获取参数。如果只是单单的访问一个页面呢?比方/Html/index.html,如何用C#传入对应的参数呢?

用js写个方法

  1. function GetID(id)
  2. {
  3. //你的方法
  4. }

然后你C#通过浏览器对象的InvokeScript方法来调用你的JS

  1. Browser.InvokeScript("GetID","");

(InvokeScript方法支持多参数)

因为我是用HttpRequest去请求数据的,把id传入后再用ajax去获取数据感觉有点慢,于是乎就直接吧json数据通过C#传入到HTML的js方法里。然后通过js方法将数据填充到对应的表格中

  1. function InsertHtml(json) {
  2. json = $.parseJSON(json);//将字符串格式化成json格式

$(

  1. "#com").html(json["CName"]);
  2. $("#name").html(json["Contact"]);
  3. $("#phone").html(json["CTel"]);
  4. $("#adress").html(json["CAddress"]);
  5. $("#ipc").html(json["OrgCoad"]);
  6. $("#jianjie").html(json["CIntro"]);
  7. }
  1. Browser.InvokeScript("InsertHtml", "{\"CAddress\": \"**省**市**区**广场1号门7楼\", \"CIntro\": \"  **建设集团有限公司成立于一九九三年,是一家综合性建筑业企业。<br>\", \"CName\": \"**建设集团有限公司\", \"CTel\": \"159****0500\", \"Contact\": \"金**\", \"OrgCoad\": \"733***90X\" }");

结果就出来了。

(注意:如果要是用JS的话一定要在WebBrowser 控件中设置 IsScriptEnabled="True",否则js不起作用)

如果我要在JS中调用C#拨打电话之类的操作呢?很简单,WebBrowser提供了这个事件。如下

  1. <input type="button" value="打电话" id="btn_call" style="width: 150px" /></p>
  2.  
  3. <script type="text/javascript">
  4. $(function () {
  5.  
  6. $("#btn_call").click(function () {
  7. window.external.notify("18300001111");
  8. });
  9.  
  10. });
  11. </script>
  1. <phone:WebBrowser x:Name="Browser"
  2. HorizontalAlignment="Stretch"
  3. VerticalAlignment="Stretch"
  4. Loaded="Browser_Loaded"
  5. IsHitTestVisible="True"
  6. IsScriptEnabled="True"
  7. NavigationFailed="Browser_NavigationFailed" Margin="0" ScriptNotify="Browser_ScriptNotify">
  8. </phone:WebBrowser>
  1. private void Browser_ScriptNotify(object sender, NotifyEventArgs e)
  2. {
  3. PhoneCallTask phone = new PhoneCallTask();
  4. phone.PhoneNumber = e.Value;
  5. phone.Show();
  6. }

5、如果你的这个HTML页面是在Pivot或者Panorama中的某个Item中,那么会遇到这个棘手的问题,就是手势操作,左右滑动可能不会切换Item。那该怎么办呢?不要急,toolkit里提供了一个组件供我们使用

  1. <phone:WebBrowser x:Name="Browser"
  2. HorizontalAlignment="Stretch"
  3. VerticalAlignment="Stretch"
  4. Loaded="Browser_Loaded"
  5. IsHitTestVisible="True"
  6. NavigationFailed="Browser_NavigationFailed" Margin="0" ScriptNotify="Browser_ScriptNotify">
  7.  
  8. <toolkit:GestureService.GestureListener>
  9. <toolkit:GestureListener Flick="GestureListener_Flick" />
  10. </toolkit:GestureService.GestureListener>
  11. </phone:WebBrowser>
  1. private void GestureListener_Flick(object sender, FlickGestureEventArgs e)
  2. {
  3.  
  4. if (e.Direction.ToString() == "Horizontal")
  5. {
  6. if (e.Angle > )//手向左滑动,即Items向右滚动
  7. {
  8. if (MyPivot.Items.Count == MyPivot.SelectedIndex + )
  9. {
  10. MyPivot.SelectedIndex = ;
  11. }
  12. else
  13. {
  14. MyPivot.SelectedIndex++;
  15. }
  16.  
  17. }
  18. else//反之
  19. {
  20. if (MyPivot.SelectedIndex == )
  21. {
  22. MyPivot.SelectedIndex = MyPivot.Items.Count;
  23. }
  24. else
  25. {
  26. MyPivot.SelectedIndex--;
  27. }
  28. }
  29. }
  30. }

如果Items的header(如图所示)没有超过屏幕宽度的话会有bug,就是切换的方向问题,还未想到好的解决方案。

6、关于网页与手机主题同步

  1. background-color: Background;/*Background跟系统背景一致*/
  2. color: Highlight;/*Highlight跟系统的主题色一致*/

7、页面的缩放

说了这么多,你可能会问,一些页面我并不想啊让缩放,怎么控制啊。很简单,由于浏览器对HTML5支持,所以只需要在HTML的Hand加入下面一段代码即可

  1. <meta content="width=device-width,user-scalable=no" name="viewport">
  1. <!--
  2. Viewport的Content相关属性介绍
  3. width - viewport的宽度 height - viewport的高度
  4. initial-scale - 初始的缩放比例
  5. minimum-scale - 允许用户缩放到的最小比例
  6. maximum-scale - 允许用户缩放到的最大比例
  7. user-scalable - 用户是否可以手动缩放
  8. --!>

  

8、资料分享

(我对HTML5了解的也不多。如果哪里不对,请大家指正。共同学习,共同进步。)

在Windows Phone中使用HTML编程的更多相关文章

  1. Windows中的库编程

    Windows操作系统中,库分为动态链接库(dll)和静态链接库(lib) 动态库是Windows中实现代码共享的一种方式.它是一个二进制式文件,不可单独运行,需要调用方调用才能运行.在Windows ...

  2. Python 编程环境搭建(Windows 系统中)

    由于大家普遍使用 Windows 系统,所以本文只介绍 Windows 系统中 Python 环境的安装. 在 Windows 中安装 Python 与安装普通软件没什么差别,下载所需版本的安装包后, ...

  3. Windows环境下多线程编程原理与应用读书笔记(3)————Windows环境中的多线程实现(3)

    纤程 纤程(fiber): 相当于用户级别的线程或轻进程.纤程由Win32库函数支持,对核心是不可见的.纤程可以通过SwitchToFiber显示至另一合作纤程,以实现合作纤程之间的协同.线程是在Wi ...

  4. .Net中的并行编程-6.常用优化策略

                本文是.Net中的并行编程第六篇,今天就介绍一些我在实际项目中的一些常用优化策略.      一.避免线程之间共享数据 避免线程之间共享数据主要是因为锁的问题,无论什么粒度的锁 ...

  5. Windows Phone下的Socket编程

    讨论下有关于Windows Phone下的Socket编程方面的知识. Socket就是通常所称的套接字,用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过Socket向网络发出请求或者应答 ...

  6. Windows开发中一些常用的辅助工具

    经常有人问如何快速的定位和解决问题,很多时候答案就是借助工具, 记录个人Windows开发中个人常用的一些辅助工具.   (1) Spy++ 相信windows开发中应该没人不知道这个工具, 我们常用 ...

  7. Windows环境下用C#编程将文件上传至阿里云OSS笔记

    Windows环境下用C#编程将文件上传至阿里云OSS笔记 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/ex_net/article/detai ...

  8. Qt4.8在Windows下的三种编程环境搭建

    Qt4.8在Windows下的三种编程环境搭建 Qt的版本是按照不同的图形系统来划分的,目前分为四个版本:Win32版,适用于Windows平台:X11版,适合于使用了X系统的各种Linux和Unix ...

  9. [.NET] 《Effective C#》快速笔记 - C# 中的动态编程

    <Effective C#>快速笔记 - C# 中的动态编程 静态类型和动态类型各有所长,静态类型能够让编译器帮你找出更多的错误,因为编译器能够在编译时进行大部分的检查工作.C# 是一种静 ...

随机推荐

  1. Linux五种IO模型

    http://www.cnblogs.com/renxs/p/3683189.html

  2. C#实现ByteBuffer类 .

    在写网络程序的时候,经常需要往一个数组里面压数据或者取数据,而Java中再Java.nio中有个ByteBuffer能很方便的实现,Delphi中也有个Stream类有着同样的功能,这里我就模仿JAV ...

  3. Can't find keyplane iOS模拟器键盘不显示解决办法

    静下心来学技术,新一波的问题再度来袭 学习swift的时候做一个app,需要用到数字键盘,但是在调试了几次后数字键盘便出不来了,控制台中弹出这样一个错误 Can't find keyplane tha ...

  4. WinForm实现跨进程通信的方法

    public class WinMessageHelper { private struct COPYDATASTRUCT { public IntPtr dwData; public int cbD ...

  5. ios - 带动画圆形旋转的进度条

    #import <UIKit/UIKit.h> @interface TJCircleProgressView : UIView /** * 图标 */ @property(nonatom ...

  6. [Arduino] Arduino Uno R3 中文介绍

    Arduino UNO是Arduino USB接口系列的最新版本,作为Arduino平台的参考标准模板.UNO的处理器核心是ATmega328,同时具有14路数字输入/输出口(其中6路可作为PWM输出 ...

  7. TCP/IP协议原理与应用笔记24:网际协议(IP)之 IP协议的简介

    1. IP协议:(网际协议) 2. IP协议(不可靠无连接数据报协议) (1)连接 vs. 可靠性 连接:面向连接.无连接 可靠:差错控制.流量控制等 面向连接不一定保证可靠,无连接不一定不可靠 在连 ...

  8. 沈逸老师PHP魔鬼特训笔记(1)

    此课程个人开发环境可以考虑使用Ubuntu ,推荐sublime和PhpStorm作为开发环境.一.PHP的一大特性是:脚本语言.不要编译,写完就可以运行? 然而并不是....... PHP代码要想运 ...

  9. 重磅消息:JavaFX官方文档翻译完毕

    经过XMan团队业余时间半年的努力,终于将JavaFX官方文档全部翻译完毕,内容已经全部在http://www.javafxchina.net中发表. 中文文档具体目录如下: 第一篇 开始学习Java ...

  10. 社区APP “钱途”漫漫

    花样年曾宣称:2013年“彩生活”物业品牌收入1.85亿,毛利率超过40%:万科万客会APP.龙湖物业APP……大量房地产企业依托物业企业,纷纷瞄准移动互联网.云计算.物联网等高新科技为基础的物业服务 ...