在Silverlight中有些项目对UserControl重新做了封装基类,如PageBase,要求项目中每个页面都要从PageBase派生,但是过程比较坎坷,本文针对这个功能点的实现以及实现过程中遇到的一些问题作了一个简要的解答。

一般看到的PageBase类如下所示:

public class PageBase : UserControl

{

//这里进行一些其他的封装操作

}

然后在具体的界面后台类中改变父类:

public partial class MainPage : PageBase

{

public MainPage()

{

InitializeComponent();

}

}

然后编译,这时编译器会提示一个错误:

"SilverlightPageBase.MainPage"的分部声明一定不能指定不同的基类

Error message in English

"SilverlightPageBase.MainPage"must not specify different base classes

原因是XAML界面和后台引用不一致造成,解决办法:

将XAML第一行改为:

<UserControl x:Class="SilverlightPageBase.PageBase" ...

再次编译又会提示新的错误:

"SilverlightPageBase.PageBase"的声明上缺少 partial 修饰符;存在此类型的其他分部声明

Error message in English

Missing partial modifier on declaration of type"SilverlightPageBase.PageBase";another partial declaration of this type exists

这时只需要在基类上加修饰符partial即可:

x:Class 属性

配置 XAML 编译,在标记和代码隐藏之间连接分部类。代码分部类在一个独立的代码文件中定义,标记分部类由代码生成过程在 XAML 编译期间创建。

//这样意思是前台和基类(父类)成为部分类的两个文件,而真正的后台类成为普通类

结果如:

public partial class PageBase : UserControl

{

//这里进行一些其他的封装操作

}

如果想要实现一些接口的话,直接在基类中实现即可:

public partial class Class1 : UserControl,IDisposable

{

public void Dispose()

{

throw new NotImplementedException();

}

}

完整代码如:

XAML文件:

<UserControl x:Class="SilverlightPageBase.PageBase"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

mc:Ignorable="d"

d:DesignHeight="300" d:DesignWidth="400">

<Grid x:Name="LayoutRoot" Background="White">

</Grid>

</UserControl>

XAML对应后台文件:(其实这里的partial已经没有存在的必要了)

namespace SilverlightPageBase

{

public partial class MainPage : PageBase

{

public MainPage()

{

InitializeComponent();

}

}

}

基类PageBase文件:

namespace SilverlightPageBase

{

public partial class PageBase : UserControl

{

//这里进行一些其他的封装操作

}

}

结论:前台是没办法继承的,要想实现继承只有将他提升为父类的部分类,让原有后台类继承他,这样可以保证原有功能的情况下实现扩展。

Silverlight页面通过继承扩展实现的更多相关文章

  1. Silverlight实例教程 - 自定义扩展Validation类,验证框架的总结和建议(转载)

    Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...

  2. SilverLight页面跳转(转载)

    // Silverlight页面的跳转 // (Application.Current.RootVisualasIContent).Content=newDragControl(); //Silver ...

  3. SilverLight 页面后台方法XX.xaml.cs 创建JS,调用JS ,弹出提示框

    1.Invoke和InvokeSelf [c-sharp] view plaincopy public partial class CreateJSDemo : UserControl { publi ...

  4. odoo开发笔记 -- 搜索视图继承扩展

    odoo开发笔记 -- 搜索视图继承扩展

  5. WPF/Silverlight 页面绑定Model验证机制升级版

    关于WPF/Silverlight的数据验证,想必大家都不陌生了. 各大牛的博客里都不泛对这方面讨论的文章. 个人比较赞赏 JV9的“Silverlight实例教程”里的Validation数据验证. ...

  6. 如何在ASP.NET 项目中使用Silverlight页面

    闲来无事,想写个网站玩玩,比较懒,不想写太多的样式来美化,看中了Silverlight,样式布局比较省事,但是又不想全部都用Silverlight 来写,所以才有此一文. 其实Silverlight最 ...

  7. 关于继承扩展ASP.NET控件(以Textbox为例)

    以下是一个相对简陋的扩展, 主要是针对金额显示的Textbox扩展. using System; using System.Collections.Generic; using System.Linq ...

  8. Python继承扩展内置类

    继承最有趣的应用是给内置类添加功能,在之前的Contact类中,我们将联系人添加到所有联系人的列表里,如果想通过名字来搜索,那么就可以在Contact类添加一个方法用于搜索,但是这种方法实际上属于列表 ...

  9. 失败的尝试,使用继承扩展数组,以及ES6的必要性

    我们都知道直接在原生对象上扩展对象是很不好的.所以prototype这样的库广受非议. 一些库,比如lodash采用了工具包形式的扩展方式,绕开了对象的继承. 由于es6的class的出现,我尝试以A ...

随机推荐

  1. ZOJ3362 Beer Problem(最小费用任意流)

    题目大概说有n个城市,由m条无向边相连,每条边每天最多运送cap桶酒且其运送一桶的花费是cost.现在从1号城市开始出发运酒,供应到2到n号城市,这些城市的收购单价是price,问最大的盈利是多少. ...

  2. 【BZOJ】1055: [HAOI2008]玩具取名(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1055 我竟然都没往dp这个方向想.....百度了下看到标题是dp马上就会转移了QAQ... 设d[i ...

  3. Windows Server 2012 FTP配置 后客户机一直登录不上

    配置FTP时出现奇怪的问题,服务器配置完成后客户机访问FTP站点时输入用户名密码一直不对. 经多次试验后发现,默认情况下是如下图配置.将用户下次登录时必须更改密码勾掉,勾选密码永不过期即可正常登录.

  4. android之OptionsMenu

    首先编写res/layout/Activity_main.xml 代码如下: <LinearLayout xmlns:android="http://schemas.android.c ...

  5. nodejs 更新最新版本

    sudo npm cache clean -f sudo npm install -g n sudo n stable

  6. 上传文件及$_FILES的用法实例

    Session变量($_SESSION):�php的SESSION函数产生的数据,都以超全局变量的方式,存放在$_SESSION变量中.1.Session简介SESSION也称为会话期,其是存储在服务 ...

  7. Description of security events in Windows 2003/7/2008

    https://technet.microsoft.com/library/cc163121.aspx#EKH https://support.microsoft.com/en-us/kb/97751 ...

  8. 如何设置NBU的Backup, Archive and Restore

    第一行表示Master Server 第二行猜测表示当前主机 第三行不清楚   总结: 1. 这里压根就没有Media Server的事, Media Server对整个备份系统来说是透明的. 2. ...

  9. SiteMesh装饰器使用总结

    SiteMesh是一个Java WEB项目的网页布局和修饰框架.使用SiteMesh后就不再需要在每个页面中都用<jsp:include>标签引入页头.页尾.导航等其他公用页面了. 可以将 ...

  10. Nginx 笔记与总结(8)Location:归纳总结

    首先对 URI 进行精准匹配,如果匹配上则退出匹配,返回精准匹配结果: 如果没有匹配上则寻找普通匹配,如果命中多个普通匹配,则记忆最长的匹配结果(不考虑 location 的顺序): 如果后面还有正则 ...