【WPF】关于窗体继承(一)
在WPF下窗体的继承看上去不是那么的美妙,或者说不是那么的习惯。
按照以前的习惯,窗体继承,通常在开发工具中选择祖先窗体即可,开发工具自动为你实现界面视图和后台代码的继承。
而对于WPF,目前看来需要自己来分别实现界面视图的继承和后台代码的继承。
附:对于WPF有的时候感觉无语,不知道你是说它进化了好,还是退化了好。 说它进步了吧,写起XAML代码起来有的时候好像在用Console Command Line,控件设计器看上去没有ActiveX时代的智能,并且稍有点错,控件设计器就撒娇不干活; 有的时候,也把很简单的事儿搞的很复杂,就像使用BitmapImage,图片路径能把你弄晕,TreeViewItem加个右键菜单吧,事件里又打死也引用不到触发的TreeViewItem,ect.; 说它退化了吧,确实又是增加了许多强悍的功能,让你学的汗流浃背、头晕眼花。 唉,一句话,“大哥,你能弄的再人性化一些吗?” |
界面视图的继承,目前来看,需要使用UserControl
后台代码的继承。可以使用窗体基类,或者直接集成到界面视图的基UserControl (也就是上一行提的UserControl)
先说一下使用窗体基类来实现后台代码的继承
通常,这一行为是这样开始的:
修改.cs文件的类继承,
public partial class RegGroupForm : ParentForm {
这时,你编译一下,会告诉你一个友好信息
“XXXXX.XXX”的分部声明一定不能指定不同的基类 |
意思很明白,哥找别一半儿去,狂Search一番,没找到另一半儿。只好请出GOOGLE大兄,他的帮众说,另一半儿在(没包在项目里的)OBJ文件夹下的.g.cs文件中。这时哥眼睛发亮,急忙找到,改了另一半的父类。然后编译,成功,噢耶。
然后哥继续干哥的买卖,不过,世界总是充满黑暗物质的。哥发现,当你改了窗体的XAML,或者引用的DLL变了,重新生成后,.g.cs又变回原先的父类了。怎么样,抓狂了吧,只好再烧香,再次请出GOOGLE大兄, 世界也是有些光明使者的,他告诉我说,绝招就是:
指定根标记的xmlns:src为父类的名称空间,然后改根标记的名称为父类的名称,如下
<src:ParentForm x:Class="UI.Design.NormalWindow.RegLibForm" xmlns:src="clr-namespace:UI.Design.NormalWindow"
如法泡制,真是好用啊,再也不变了,。不过,且慢,当你泡到要应用二级父窗体类时,WPF又娇滴滴的说了:
“XXXXX.XXX”不能是 XAML 文件的根,因为它是使用 XAML 定义的 |
我。。。,又抓狂了半天,明白了,原来父窗体是得光屁股的:不能有XAML文件对应,无论是哪一级窗体祖宗。
世界终于平静下来,当然,也只是一会儿….
参见光明使者的明符:http://weblogs.asp.net/psheriff/archive/2009/11/02/creating-a-base-window-class-in-wpf.aspx
Apollo Sun
可以转载,但不可用于赢利性用途。保留所有权利 。
===============================================================
posted on 2010-03-16 15:20 Apollo Sun 阅读(6896) 评论(2) 编辑 收藏 举报