屋顶上的木帷幕

海鸥之所以追着渔船飞,是因为它们认为会有沙丁鱼抛向大海 - Eric Cantona, 1995
随笔 - 146, 评论 - 3168, 引用 - 56

导航

工具

关于


标签

每月存档

广告



访客

 

windowsforms.net上面有人搞了一个Windows Forms Markup Language (WFML),还蛮有意思的。可能和XAML有点像,不过我没有研究过XAML。

我写了个简单的例子来研究这个WFML。例如,我在ContextMenu.xml里面用这种WinForm标记语言描述了一个ContextMenu:

<wfml xmlns="http://www.microsoft.com/2003/WindowsForms" xmlns:wfml="http://www.microsoft.com/2003/WFML">

<ContextMenu wfml:root="true" Name="ContextMenu1">

<MenuItem Text="Open" wfml:ID="menuOpen" Click="me.OnMenuOpen" />

<MenuItem Text="Print" wfml:ID="menuPrint" Click="me.OnMenuPrint" />

<MenuItem Text="-" wfml:ID="menuSeperator" />

<MenuItem Text="Exit" wfml:ID="menuExit" Click="me.OnMenuExit" /> ContextMenu>

wfml>

然后,在我的应用程序里面,就可以On-The-Fly的读取这个描述文件来创建一个ContextMenu:

MarkupParser? parser = new MarkupParser();

parser.AddVariable("me", this);

object obj=parser.Parse("ContextMenu.xml");

this.label1.ContextMenu=(ContextMenu)obj;

代码很简洁易懂。这里的MarkupParser就是WFML类库提供的。

如果再花一些时间,还可以做到让用户在程序运行时动态选择ContextMenu需要有哪些项,而且下次运行还能persist前一次的选择。这是运行的截图:

当然,从原理上来说,这些功能不靠WFML也都能做到:你完全可以On-The-Fly的构建一个ContextMenu对象,你可以把菜单项的选择存到注册表以实现persist,或者也可以存成一个XML文件——只不过你需要自己写Serializer、Parser、Mapper,你会累死的。有了WFML,在它的基础上,我们就可以在商业项目中更方便的实现让客户自己订制界面。

有兴趣的可以自己也试试看。你可以在这里下载我做的这个例子程序,里面有完整的可执行文件、WFML库和ContextMenu.xml。至于源代码,就直接用Reflector.NET从Assembly里面看吧。


随贴广告(测试期)
相关文章

打印 | 张贴于 2004-03-09 12:31:00 | Tag:Dot NET

留言反馈

re: Windows Forms Markup Language (WFML) 编辑
sap底软件窗体全是xml文件生成底。
2004-08-21 15:59:00 | [匿名用户:a]
回复: Windows Forms Markup Language (WFML) 编辑
windows应用程序的markup language不是一个新东西。至少我在2000年的时候就接触过。那时候是给一个美国的公司作一个带有研究性质的项目的前期,项目的核心是AML (Application Markup Language)。做的事情就是解析XML,然后render成win32 gui object。用的语言是MFC和C++。

-

说说我的看法:WFML并不是用来写Winform程序的。

换句话或,我不觉得将来有一天WinForm也会用类似HTML的markup language来写。因为从开发效率、支持的feature和灵活性上面来说,C#仍然远远好于html这种markup language。

WFML——我觉得——主要的用途就是像我的例子这样用来实现客户定制界面。

将来web和winform会不会合流?可能会,可能不会,我也说不出。

如果合流,可能的方向会有两个:
1)全部走向markup language,运行时需要一个renderer和host
2)全部走向WinForm的方式,以后浏览器里面运行的就是WinForm in IE。

走一步算一步吧,谁也不能预测未来
2004-03-10 10:45:00 | [匿名用户:mvm]
回复: Windows Forms Markup Language (WFML) 编辑
以前在MSDN Show上看过这个,当时就在想这个玩意会不会普及?如果WinForm下的程序也这样写的话,会不会在下次技术变化时,Win和Web来个“统一”?那将意味着什么?
2004-03-10 10:02:00 | [匿名用户:SolidGL]
回复: Windows Forms Markup Language (WFML) 编辑
赫赫,例子写的不好,代码算不得好看。
2004-03-10 08:50:00 | [匿名用户:mvm]
回复: Windows Forms Markup Language (WFML) 编辑
仔细看了WFML的文档,感觉有些限制不爽,用标签描述的控件的构造函数的参数不能大于1个,用标签直接调用的method的参数不能大于1个,呵呵。

XAML用.Net FX 2.0提供Partial Class的能力让代码直接访问XAML文件中声明的对象,很直观。

FWML的方式稍微麻烦一些,先在另外单独的代码文件中把WFML文件Parse出来,然后用Parse的Find()来获取声明在FWML中的对象。FWML中声明的对象的事件处理要通过Parser的AddVariable()方法来间接实现。

晚上研究mvm的那个例子。
2004-03-09 19:11:00 | [匿名用户:kaneboy]
博客主人设置本博客不允许匿名用户发表言论,请登录后再试

Powered by: Joycode MVC Blogger System