【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

posted on 2010-03-16 15:20  Apollo Sun  阅读(6857)  评论(2编辑  收藏  举报

导航