在Windows Phone中使用HTML编程

原文:在Windows Phone中使用HTML编程

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

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

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

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

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

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

<div>
        <table border="1">
            <tr>
                <td class="td-title">企业名称</td>
                <td id="com"></td>
            </tr>
            <tr>
                <td class="td-title">企业法人</td>
                <td id="name"></td>
            </tr>
            <tr>
                <td class="td-title">法人电话</td>
                <td id="phone"></td>
            </tr>
            <tr>
                <td class="td-title">企业所在地</td>
                <td id="adress"></td>
            </tr>
            <tr>
                <td class="td-title">备案号</td>
                <td id="ipc"></td>
            </tr>
        </table>
        <p id="jianjie"></p>
    </div>

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

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

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

用js写个方法

function GetID(id)
        {
            //你的方法
        }

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

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

(InvokeScript方法支持多参数)

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

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

$(

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

结果就出来了。

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

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

<input type="button" value="打电话" id="btn_call" style="width: 150px" /></p>

 <script type="text/javascript">
        $(function () {

            $("#btn_call").click(function () {
                window.external.notify("18300001111");
            });

        });
</script>
<phone:WebBrowser x:Name="Browser"
                          HorizontalAlignment="Stretch"
                          VerticalAlignment="Stretch"
                          Loaded="Browser_Loaded"
                                  IsHitTestVisible="True"
                                  IsScriptEnabled="True"
                          NavigationFailed="Browser_NavigationFailed"  Margin="0"                                                      ScriptNotify="Browser_ScriptNotify">
                </phone:WebBrowser>
private void Browser_ScriptNotify(object sender, NotifyEventArgs e)
        {
            PhoneCallTask phone = new PhoneCallTask();
            phone.PhoneNumber = e.Value;
            phone.Show();
        }

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

<phone:WebBrowser x:Name="Browser"
                          HorizontalAlignment="Stretch"
                          VerticalAlignment="Stretch"
                          Loaded="Browser_Loaded"
                                  IsHitTestVisible="True"
                          NavigationFailed="Browser_NavigationFailed"  Margin="0" ScriptNotify="Browser_ScriptNotify">

                    <toolkit:GestureService.GestureListener>
                        <toolkit:GestureListener Flick="GestureListener_Flick" />
                    </toolkit:GestureService.GestureListener>
                </phone:WebBrowser>
private void GestureListener_Flick(object sender, FlickGestureEventArgs e)
        {

            if (e.Direction.ToString() == "Horizontal")
            {
                if (e.Angle > 0)//手向左滑动,即Items向右滚动
                {
                    if (MyPivot.Items.Count == MyPivot.SelectedIndex + 1)
                    {
                        MyPivot.SelectedIndex = 0;
                    }
                    else
                    {
                        MyPivot.SelectedIndex++;
                    }

                }
                else//反之
                {
                    if (MyPivot.SelectedIndex == 0)
                    {
                        MyPivot.SelectedIndex = MyPivot.Items.Count;
                    }
                    else
                    {
                        MyPivot.SelectedIndex--;
                    }
                }
            }
        }

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

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

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

 

7、资料分享

 Windows Phone WebBrowser的技巧 

  HTML5 in Windows Phone 8.zip 

 

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

时间: 2024-11-01 16:15:20

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

windows系统中基于WIFI的网络编程

问题描述 windows系统中基于WIFI的网络编程 想用C++写一个在windows系统中基于WIFI传输数据的网络小程序,请各位高手指点一下,应该从哪方面入手,开发流程是什么样的? 解决方案 什么也不用操心,wifi对于你的程序来说,是透明的,换一句话说,无线有线你的代码无需变化.在windows下,可以使用winsock编程实现通讯,如果是vc++,用mfc,可以用csocket类,具体google下,有现成的代码例子. 解决方案二: 就是winsock2而已不管网络是什么,用这个就对了,

编程-windows程序设计中MM_ANISOTROPIC使用问题

问题描述 windows程序设计中MM_ANISOTROPIC使用问题 SetWindowExtEx, 用于设置逻辑坐标范围. SetViewPortExtEx, 用于设置设备坐标范围. 那么,如果存在以下代码: SetMapMode(hdc,MM_ANISOTROPIC); SetWindowExtEx(hdc,200,200,NULL);//将窗口的逻辑坐标X轴0 到200,Y轴设置为0 到200 //将视口原点设置为客户区的中心点上 SetViewportOrgEx(hdc,rectCli

C#中使用DirectX编程

编程   我感觉声音的播放比较简单.我们从播放声音开始.为什么我这么觉得?我也不知道.这里是展示最最最最最简单的DirectX播放声音的例子,我尽量省略了无关的代码.最后的代码只有19行,够简单了吧? 准备工作:1.安装了DirectX SDK(有9个DLL文件).这里我们只用到MicroSoft.DirectX.dll 和 Microsoft.Directx.DirectSound.dll2.一个WAV文件.(这样的文件比较好找,在QQ的目录里就不少啊.这里就不多说了.)名字叫SND.WAV,

F#入门:使用.NET Framework中的函数式编程技术

本文讨论: 安装 F# F# 语言基础 .NET 互操作性 异步 F# 本文使用了以下技术: .NET Framework, F# 目录 为什么要使用 F#? 安装 F# 您好,F# Let 表达式 关键字 For 管道 F# 也能够处理对象 异步 F# 与 F# 合作 作 为 Microsoft .NET Framework 家族的新成员,F# 提供类型安全.性能以及类似脚本语言的工作能力,所有这些都是 .NET 环境的一部分.此函数式语言由 Microsoft 研究院的 Don Syme 发

Linux系统下QT中的多线程编程

Qt 作为一种基于 C++ 的跨平台 GUI 系统,能够提供给用户构造图形用户界面的强大功能.为了满足 用户构造复杂图形界面系统的需求,Qt 提供了丰富的多线程编程支持. Qt 作为一种基于 C++ 的跨平台 GUI 系统,能够提供给用户构造图形用户界面的强大功能.为了满足 用户构造复杂图形界面系统的需求,Qt 提供了丰富的多线程编程支持.从 2.2 版本开始,Qt 主要从下 面三个方面对多线程编程提供支持:一.构造了一些基本的与平台无关的线程类:二.提交用户自定义事 件的 Thread-saf

在CB中进行DirectX编程(3)

2.3 装入并显示图形文件 为了简明地说明采用DirectDraw图形文件的显示技术,我们以示例程序dx2介绍图面.图形文件装入.图形缩放.图形在图面上显示等的初步概念和实现技术. 2.3.1 DirectDraw显示图形的技术 为了显示图象,DirectDraw必需首先拥有类似画布(canvas)的绘图空间,DirectDraw并不向在DOS下那样简单地将显示缓存作为绘画的对象,而是通过DirectDraw对象创建各种不同种类的"图面"(Suerface),图面上的内容可以被应用程序

在C++ Builder中使用OpenGL编程的优化框架

姑且不谈论OpenGL的名贵背景和光明前途,单凭其实用性和有效性就足以使其成为我们图形输出编程的首选.但是在实际工程应用中程序员没必要仔细地深究OpenGL的运作机制,也往往不需要掌握各种高级的效果制作,真正需要的是最简捷地利用这个得力的工具实现输出数据的可视化,如波形.谱图.立体统计图表等的显示.有鉴于此,本文总结出了在C++Builder中OpenGL编程的实用框架.笔者经过实践,对于一般的图形输出的应用,此框架足以应付.对于复杂些的程序可以在本框架的基础上进行扩充. 在Windows环境下

Ruby中的Socket编程简单入门

  这篇文章主要介绍了Ruby中的Socket编程简单入门,是Ruby网络编程学习中的基础知识,需要的朋友可以参考下 Ruby提供了两个访问级别的网络服务.在一个较低的水平,可以访问底层的操作系统,它可以实现面向连接和无连接协议的客户端和服务器支持基本的socket. Ruby也具有程序库,提供更高级别的访问特定的应用程序级的网络协议,如FTP,HTTP等. 这篇教程介绍 Ruby Socket编程概念及讲解一个简单的实例. 什么是Sockets? 套接字是一个双向通信信道的端点.socket能

c++在windows操作系统下的多线程编程?

问题描述 c++在windows操作系统下的多线程编程? 想在windows操作系统上的VS2010将代码实现多线程并行执行,可是之前没接触过,不知道怎么操作编代码,求大神指导!!! 解决方案 Windows多线程编程多线程编程windowsWindows 下多线程编程 解决方案二: http://www.cnblogs.com/china-victory/archive/2012/11/09/2763187.html 解决方案三: 把任务分割号,细分好,各个线程任务分好 其他都不复杂,虽然会有