Silverlight 自定义控件的继承问题

Silverlight 提供 UserControl, ChildWindow , Page 等.

如果不想直接从这些公共组件继承,而是继承自己的基类如 PageBase, 或自定义的UserControl\ChildWindow等.

在编译的时候,VS 会报异常,

错误 1 “MyForm.UserForm”的分部声明一定不能指定不同的基

类 D:\MyForm\UserForm.g.cs 37 26 MyForm.

记得asp.net 的page页面会自动一个page.design.cs的文件,存放一些界面元素的声明, 而Silverlight则生成 page.g.cs (存放在debug\obj\*文件夹里).

其实这个问题很好解决.

在修改CS代码,使继承某个基类的同时, 也要修改相应的xaml文件,最开头的那一行.

如是继承 UserControl, ,,, xaml 结构 <UserControl .... </UserControl>

如是继承 ChildWindow , ,,, xaml 结构 <controls:ChildWindow.... </controls:ChildWindow>

如是继承 Page, ,,          , xaml 结构 <navigation:Page.... </navigation:Page>

如果继承 自定义的基类 PageBase. 那么xaml 改成 <MyPage:PageBase ...... </MyPage:PageBase>

PageBase 是类名.

MyPage PageBase类所在的空间名,这个仅接着 <MyPage:PageBase ..后定义的.是这个元素的属性之一.

例子:

<MyPage: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"
 xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
 xmlns:System_Windows_Controls_Primitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls"
 xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"

xmlns:MyPage="clr-namespace:MyPage.Pages" 
 x:="MyPage..Pages.MyPage"


 Title="UsedButton Page">

....

</MyPage:PageBase >

cs 代码

namespace MyPage
{
    public partial class MyPage: PageBase
    {

....

    }

}

posted @ 2010-12-23 13:40  遥望星空  阅读(590)  评论(0编辑  收藏  举报