Silverlight页面通过继承扩展实现
2013-09-06 22:58
525 查看
在Silverlight中有些项目对UserControl重新做了封装基类,如PageBase,要求项目中每个页面都要从PageBase派生,但是过程比较坎坷,本文针对这个功能点的实现以及实现过程中遇到的一些问题作了一个简要的解答。
一般看到的PageBase类如下所示:
然后在具体的界面后台类中改变父类:
然后编译,这时编译器会提示一个错误:
Error message in English
原因是XAML界面和后台引用不一致造成,解决办法:
将XAML第一行改为:
再次编译又会提示新的错误:
Error message in English
这时只需要在基类上加修饰符partial即可:
结果如:
如果想要实现一些接口的话,直接在基类中实现即可:
完整代码如:
XAML文件:
XAML对应后台文件:(其实这里的partial已经没有存在的必要了)
基类PageBase文件:
结论:前台是没办法继承的,要想实现继承只有将他提升为父类的部分类,让原有后台类继承他,这样可以保证原有功能的情况下实现扩展。
一般看到的PageBase类如下所示:
public class PageBase : UserControl { //这里进行一些其他的封装操作 } |
public partial class MainPage : PageBase { public MainPage() { InitializeComponent(); } } |
"SilverlightPageBase.MainPage"的分部声明一定不能指定不同的基类 |
"SilverlightPageBase.MainPage"must not specify different base classes |
将XAML第一行改为:
<UserControl x:Class="SilverlightPageBase.PageBase" ... |
"SilverlightPageBase.PageBase"的声明上缺少 partial 修饰符;存在此类型的其他分部声明 |
Missing partial modifier on declaration of type"SilverlightPageBase.PageBase";another partial declaration of this type exists |
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> |
namespace SilverlightPageBase { public partial class MainPage : PageBase { public MainPage() { InitializeComponent(); } } } |
namespace SilverlightPageBase { public partial class PageBase : UserControl { //这里进行一些其他的封装操作 } } |
相关文章推荐
- PHP Smarty模板继承。 通过内置函数extends和block实现父模板(视图母版页面和内容页)
- MVC扩展控制器工厂,通过继承DefaultControllerFactory来决定使用哪个接口实现,使用Ninject
- DAO中使用内部继承实现通过多重属性查看页面中的列表
- Spring MVC代码实例系列-04:通过自定义视图(继承InternalResourceView),实现既能解析Jsp页面又能解析Html页面的目的
- 通过继承Struts2标签,实现页面元素的显示权限控制
- 通过继承实现edit控件的拖拽文件功能扩展的一般步骤
- 稳扎稳打Silverlight(58) - 4.0通信之WCF RIA Services: 通过 Domain Service, 以 MVVM 模式实现数据的添加、删除、修改和查询
- Android通过继承Binder类实现多进程通信
- 继承的另一种实现方式- 通过复制属性实现继承
- iOS开发标记——各个ViewController页面数据交互,通过NSUserDefaults实现。
- 安装使用php zlib扩展实现页面gzip压缩输出实例
- ASP.NET jQuery 食谱12 (通过使用jQuery validation插件简单实现用户注册页面验证功能)
- poshytip实现页面记录未展示的部分通过提示框展示
- silverlight 初始页面进行安装主应用(初始安装xap,本地加载xap),实现silverlight程序成桌面应用程序。
- 通过扩展Silverlight的控件DataGrid,使其垂直滚动条支持鼠标滑轮 (转)
- loction.search 通过地址栏实现页面之间的数据传输、接受、展示、处理方法
- 如何通过js实现页面光标位置的控制
- 线程的实现(通过继承Thread类实现调用run())
- OpenResty通过Lua扩展NGINX实现的可伸缩的Web平台
- silverlight中实现页面传值