Silverlight页面通过继承扩展实现
在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页面通过继承扩展实现的更多相关文章
- Silverlight实例教程 - 自定义扩展Validation类,验证框架的总结和建议(转载)
Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...
- SilverLight页面跳转(转载)
// Silverlight页面的跳转 // (Application.Current.RootVisualasIContent).Content=newDragControl(); //Silver ...
- SilverLight 页面后台方法XX.xaml.cs 创建JS,调用JS ,弹出提示框
1.Invoke和InvokeSelf [c-sharp] view plaincopy public partial class CreateJSDemo : UserControl { publi ...
- odoo开发笔记 -- 搜索视图继承扩展
odoo开发笔记 -- 搜索视图继承扩展
- WPF/Silverlight 页面绑定Model验证机制升级版
关于WPF/Silverlight的数据验证,想必大家都不陌生了. 各大牛的博客里都不泛对这方面讨论的文章. 个人比较赞赏 JV9的“Silverlight实例教程”里的Validation数据验证. ...
- 如何在ASP.NET 项目中使用Silverlight页面
闲来无事,想写个网站玩玩,比较懒,不想写太多的样式来美化,看中了Silverlight,样式布局比较省事,但是又不想全部都用Silverlight 来写,所以才有此一文. 其实Silverlight最 ...
- 关于继承扩展ASP.NET控件(以Textbox为例)
以下是一个相对简陋的扩展, 主要是针对金额显示的Textbox扩展. using System; using System.Collections.Generic; using System.Linq ...
- Python继承扩展内置类
继承最有趣的应用是给内置类添加功能,在之前的Contact类中,我们将联系人添加到所有联系人的列表里,如果想通过名字来搜索,那么就可以在Contact类添加一个方法用于搜索,但是这种方法实际上属于列表 ...
- 失败的尝试,使用继承扩展数组,以及ES6的必要性
我们都知道直接在原生对象上扩展对象是很不好的.所以prototype这样的库广受非议. 一些库,比如lodash采用了工具包形式的扩展方式,绕开了对象的继承. 由于es6的class的出现,我尝试以A ...
随机推荐
- CentOS6.4 安装LVS-RRD监控LVS
1.安装依赖包 yum install -y php httpd bc rrdtool 启动apache (我看网上的一些文档说不能用80端口,但我用80端口试了一下也好使,如果出现不好使的情况就改一 ...
- 【wikioi】1227 方格取数 2(费用流)
http://www.wikioi.com/problem/1227 裸题,拆点,容量为1,费用为点权的负数(代表只能取一次).再在拆好的两个点连边,容量为oo,费用为0.(代表能取0) 然后向右和下 ...
- Catalan数 && 【NOIP2003】出栈序列统计
令h(1)=1, h(0)=1,catalan数满足递归式: h(n)=h(0)*h(n-1)+h(1)*h(n-2)+...+h(n-1)h(0) (n>=2) =C(2n, n)/(n+1) ...
- COJ978 WZJ的数据结构(负二十二)
试题描述 输入两个正整数N.K,以及N个整数Ai,求第K小数. 输入 第一行为两个正整数N.K.第二行为N个正整数Ai. 输出 输出第K小数. 输入示例 5 41 2 3 3 5 输出示例 3 其他说 ...
- asp.net 微信企业号办公系统-流程设计--流程步骤设置-策略设置
策略设置包括当前步骤的流转方式,处理人员,退回策略等设置. 流转类型:当前步骤后面有多个步骤时,此类型选择可以决定后续步骤的发送方式. 1.系统控制:由系统根据您在线上设置的流转条件来判断该发送到哪一 ...
- select @@identity的用法
用select @@identity得到上一次插入记录时自动产生的ID 如果你使用存储过程的话,将非常简单,代码如下:SET @NewID=@@IDENTITY 说明: 在 一条 INSERT.SEL ...
- Add Customerlize Button in More Button List In Odoo
There're two commen type of actions in odoo: ir.actions.server,ir.actions.client_multi 1.Using ir.ac ...
- SparkContext.setCheckpointDir()
class SparkContext extends Logging with ExecutorAllocationClient Main entry point for Spark function ...
- [转载]从GetSafeHwnd()和GetSafeHandle()分析句柄和指针
GetSafeHwnd()和GetSafeHandle()的主要区别: 1.使用者不同: (1)窗体使用: GetSafeHwnd()用于获取窗体的安全句柄(即HWND),有了HWND我们就可以方便的 ...
- APT 常用功能
apt-get install package 安装包 apt-get reinstall package 重新安装包 apt-get upgrade 更新已安装的包 #apt-get update ...