大鱼小鱼无不容,再一次运行FirstApp.exe
我们打开FirstApp这个工程,在Form1上面增加一个panel控件,同时设置panel1的“Anchor”属性:
(带有一个panel的Form1)
编译之后重新生成FirstApp.exe。我们修改一下FirstApp.Index.html:
<!-- This is "index.html". Normally, it is named "ProjectName.index.html". This webpage is the real entry point of the HTML-driven App. -->
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>欢迎您进入一个全新的.NET世界, 我是您的朋友WebRuntime</title>
<link rel="icon" href="webpage/app.png" sizes="32x32">
</head>
<body>
<cosmos>
<!-- Define new DOM elements -->
<define tagName="mainWindow"></define>
<define tagName="application"></define>
<define tagName="webViewport"></define>
<!-- End Define new DOM elements -->
<!-- The "application" element is required, it can provide application-level configuration. -->
<application>
<ntp>
<winNucleus>
<xobj id='grid' rows='1' cols='2' width='350,350,' splitterwidth='6'>
<xobj objid="FirstApp.Form1,host"></xobj>
<xobj objid="nucleus"></xobj>
</xobj>
</winNucleus>
</ntp>
<defaultworkbench>
<winNucleus>
<xobj id='grid' rows='1' cols='2' width='350,350,' splitterwidth='6'>
<xobj objid="FirstApp.Form1,host"></xobj>
<xobj objid="nucleus"></xobj>
</xobj>
</winNucleus>
</defaultworkbench>
<urls>
<url url="host:WebPage/sunny.html"></url>
</urls>
</application>
<mainWindow objid="FirstApp.Form1,host" caption="The Universe" width="2400" height="1600" id="mainForm">
<panel1 id="mainworkclient">
<default>
<winNucleus>
<xobj style="39" activepage="1">
<xobj caption="Cloudx Application" id='Splitter1' rows='1' cols='2' height='250,' width='350,350,' borderwidth='0' splitterwidth='6'>
<xobj objid="nucleus">
</xobj>
<xobj objid="" id="Sunny_ntpctrl">
</xobj>
</xobj>
<xobj caption="Common Web Runtime for Application" url="host"></xobj>
</xobj>
</winNucleus>
</default>
</panel1>
</mainWindow>
<webViewport>
<winNucleus>
<xobj rows="1" cols="2" width="750," id="xxx" caption="test caption">
<xobj objid="FirstApp.Form1,host" id="navCtrl">
</xobj>
<xobj objid="nucleus" id="mainClient">
</xobj>
</xobj>
</winNucleus>
</webViewport>
</cosmos>
<strong style="font-size:32px; color:black">欢迎<i style="color:fuchsia">您来到</i><i style="color:blue">FirstApp的 </i><b style="color:coral">.NET桌面软件生态世界</b>!</strong>
</body>
</html>
注意页面之中关于panel1的对应元素:
<panel1 id="mainworkclient">
<default>
<winNucleus>
<xobj style="39" activepage="1">
<xobj caption="Cloudx Application" id='Splitter1' rows='1' cols='2' height='250,' width='350,350,' borderwidth='0' splitterwidth='6'>
<xobj objid="nucleus">
</xobj>
<xobj objid="" id="Sunny_ntpctrl">
</xobj>
</xobj>
<xobj caption="Common Web Runtime for Application" url="host"></xobj>
</xobj>
</winNucleus>
</default>
</panel1>
修改之后重新启动FirstApp.exe,我们看到:
FirstApp运行时视频
(看上去增加了很多东西)
Form窗体中间部分,事实上就是浏览器窗口,切换浏览器标签,我们会看到:
点击其中的超链接:
点击页面上的按钮:
我们看到,Form窗体呈现很多设计时没有的动态变化,切换Form中心底部的标签:
事实上,当我们回到FirstApp.Index.html,我们发现,所有的变化,都源于Web页面上的DOM元素。在FirstApp.index.html之中,我们看到如下内容:
<winNucleus>
<xobj rows="1" cols="2" width="750," id="xxx" caption="test caption">
<xobj objid="FirstApp.Form1,host" id="navCtrl">
</xobj>
<xobj objid="nucleus" id="mainClient">
</xobj>
</xobj>
</winNucleus>
这里,”objid="FirstApp.Form1,host"“,导致FirstApp内部的Form1成为运行时Form1的”一部分“,如下图:
我们似乎看到一种可能性:按照类似的写法,似乎所有的.NET UserControl都应该成为中心部分可以通过Web页面动态的加载上去,事实上,系统内部就是这样实现的。
”大鱼小鱼无不容“ 表达了这样的设想,一旦Exe做为入口确定下来,那么那些符合规范的.NET GUI对象,都应该是Web页面驱动的元素,如果一个应用系统内置了浏览器,那么就意味着,开发者可以通过大量的写Web页面,营造出表现力极为丰富的”应用内容“空间,特别,这些Web页面可以成为一个Form窗体(更一般的情况:Win32窗体)的一部分,进而形成了”大鱼小鱼无不容“的态势。北冥神功的要义是,那些好的东西,都可以为你所用,不局限于你应用系统之内的那些元素……
(待续……)