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 ...
随机推荐
- The number of divisors(约数) about Humble Numbers[HDU1492]
The number of divisors(约数) about Humble Numbers Time Limit: 2000/1000 MS (Java/Others) Memory Lim ...
- 游戏 slider
using UnityEngine; using System.Collections; public class La : MonoBehaviour { float verticalValue=0 ...
- 关于 Xcode bitcode 错误
关于 bitcode 报错 有类似上图关于bitcode的错误用以下方法解决:
- TAT,我的LCT转双旋了
这里是rotate和splay函数 void rotate(int x) { ]==x; ch[y][d^]=ch[x][d];pre[ch[x][d]]=y; ch[z][ch[z][]==y]=x ...
- Jquery焦点图实例
对于很多建站的朋友来讲,焦点图并不陌生,一般的企业站,门户站都会用到焦点图.我们平时在写html代码的时候,很多人为了省时省力,对于焦点图都是在网上下载一些人家写好的代码,直接套上去即可,很多时候我自 ...
- event.keycode大全(javascript)
keycode 8 = BackSpace BackSpace keycode 9 = Tab Tab keycode 12 = Clear keycode 13 = Enter keycode 16 ...
- How to: Fix a network printer suddenly showing as offline in Windows Vista, 7 or 8 « Robin's Blog
This post has become quite popular – so I've updated it with a bit more detail, plus some people's e ...
- CSS权威指南 - 浮动和定位 2
定位 定位的想法很简单元素框相对于正常位置出现在哪里. 定位:static,相对, 绝对, fixed, 继承 static就是默认的位置 相对就是相对于默认位置的偏移.原来的static定位位置依然 ...
- scapy 安装及简单测试
关于scapy Scapy的是一个强大的交互式数据包处理程序(使用python编写).它能够伪造或者解码大量的网络协议数据包,能够发送.捕捉.匹配请求和回复包等等.它可以很容易地处理一些典型操作,比如 ...
- PHP 设计模式 笔记与总结(2)开发 PSR-0 的基础框架
[PSR-0 规范的三项约定]: ① 命名空间必须与绝对路径一致 ② 类名的首字母必须大写 ③ 除入口文件外,其他".php"必须只有一个类(不能有可执行的代码) [开发符合 PS ...