XAML之外,.NET Form上的HTML文档对象模型
Author: Liang Bo
我们希望一个应用程序的UI是运行时可编辑的,这样对它的修改就可以随时进行。微软在Longhorn编程模型中使用XAML提供用户界面的描述机制,但现在HTML网页也具备这样的特征。相较传统的Windows Form而言,网页更加绚丽、多彩、富于动感,当然我们并不仅仅需要美观,我们要使得网页可以和窗口中的其他部分一起交互协同,和普通的窗口控件没什么两样。
再继续本文的阅读之前作者希望您具备以下技术基础:(1)熟悉至少一种.NET语言(2)对网页的标记有一些了解并能够使用工具如Frontpage or Dreamweaver制作[这不是必需的,即使您不熟悉网页制作,可能您的朋友中间有人精于此道](3)Javascript或者VBScript脚本基础[这也不是必需的,您可以参考文章的代码示例来编写他们]
最后,您需要获得TZ Web-Style Form Control控件。它提供了扩展的文档对象模型,帮助开发者获得所浏览网页的宿主窗口对象,并调用方法,传递参数。您还可以使用应用程序的右键菜单替换掉网页的右键菜单,使应用程序的风格保持一致。您可以在这里下载该控件:
http://www.apptemplate.com/downloads/TZWBC.asp
1. 使用HTML控件传递参数给.NET Form
我们先制作一个简单的网页,使用TZ Web-Style Control来浏览它,并填满Form窗口作为用户界面。除了背景图片之外,我们
(1) 在网页中增加两个单行文本框控件,分别命名为txtMsgTitle, txtMsgContent,增加按钮,代码如下:
<INPUT id="Button22" style="WIDTH: 200px; HEIGHT: 32px" type="button" value="Message Show"
name="Button2" language="javascript" οnclick="return Button2_onclick()">
(2) 在HTML文件的<head></head>标签中增加如下代码:
<script language="javascript" id="clientEventHandlersJS">
<!- -
window.external.MsgBoxShow(txtMsgTitle.value,txtMsgContent.value);
//-->
window.external获得浏览器控件的宿主Form对象,调用它的MsgBoxShow方法,您也可以使用如下代码:
/********************************
var appobj;
function window_onload() {
appobj = window.external; //Get Host Application Object
appobj.MsgBoxShow(txtMsgTitle.value,txtMsgContent.value);
********************************/
(3) 在Form1窗口中增加一个TZ Web-Style Form Control,设置Dock属性为Fill,设置URL_Opposite为index.htm,这样他就可以浏览在应用程序同一目录下的index.htm网页。在Form1.cs中增加函数
public void MsgBoxShow(String Title, String content)
{ MessageBox.Show(Title,content,System.Windows.Forms.MessageBoxButtons.YesNo,System.Windows.Forms.MessageBoxIcon.Information);
}
注意,方法必须声明为Public。
将应用程序的可执行文件和网页文件放置在同一个目录下,运行:
2. 一个Microsoft Money风格的应用
在这个应用中,我们在窗口的顶部使用了一个TZ Web-Style Form Control,用它来浏览一个本地网页,具体代码请参看附件或发电子邮件向我索取。在网页中我插入了一个6*2的表格放置翻转图片(页面调入时显示第一幅图片,鼠标停靠后显示第二幅图片)和文字。为了使表格随着窗口的变化(严格意义上来讲是随着控件大小的变化)而变化充满窗口,我们设定表格的宽高为100%:
<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0" background="background.png">
同时为了使网页填满浏览器控件而不留下空白,我们设定body标记的相应属性:
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
当单击”account list”翻转图片按钮时,调用宿主.NET窗口的函数来填充下部的Listview。在这里我们使用了自定义菜单替换了网页的上下文菜单,使得整个应用浑然一体。
结合HTML, DHMTL, VBScript, Javascript以及图像处理工具(如Photoshop),开发人员可以设计出更加丰富多彩的用户界面。如果这些网页是来自远程的ASP/ASPX/JSP动态网页,应用程序的可维护性会变得更加容易,效果惊人。
文中所提到的TZ Web-Style Control可以到这里下载: