从其他用户控件继承用户控件

时间:2013-02-06 16:43:20

标签: windows-phone-7 windows-phone-8

我正在开发windows phone 8 app。想要从特定用户控件继承一些用户控件。我像这样定义我的父用户控件:

公共抽象类WidgetsUserControl:UserControl {

}

和孩子一样:

public partial class childControl:WidgetsUserControl {

}

但是在定义抽象时会出错:“在'project1.WidgetsUserControl'类型的声明中缺少部分修饰符;此类型的另一个部分声明存在”

我做错了什么?

2 个答案:

答案 0 :(得分:2)

抱怨您在WidgetsUserControl类的定义中没有“partial”关键字。您可能有一个WidgetsUserControl的相应XAML文件,它部分定义了该类,所以在这里,您需要指定它也是部分定义的。

public abstract partial class WidgetsUserControl : UserControl

请注意,如果您朝这个方向前进,那么您还需要使childControl定义保持一致。也就是说,在您将拥有的代码中:

public partial class childControl : WidgetsUserControl

并且在XAML中,您还需要指定childControl是一个WidgetsUserControl,而不仅仅是一个简单的UserControl:

<project1:WidgetsUserControl>
</project1:WidgetsUserControl>

虽然这会起作用,但是你遇到的一个问题是Visual Studio Designer会抱怨它无法创建WidgetsUserControl的实例(因为它是抽象的)。这使得对childControl的可视化和编辑有点困难。为了解决这个问题,我的建议是在基础WidgetsUserControl中删除“abstract”。如果您真的希望基类是抽象的,那么请参阅此处获取其他建议:

Abstract class in designer

答案 1 :(得分:1)

This works good:
Code behind for parent user control:

    public abstract partial class WidgetsUserControl : UserControl {
        ...
        }

xaml for parent class:    
    <UserControl 
           ...
            xmlns:we="clr-namespace:project1"
            ...>

    </UserControl>

code behind for child user control:
    public partial class childControl : WidgetsUserControl {
    ...
    }

xaml for child user control:
    <we:WidgetsUserControl x:Class="project1.childControl"
       ...
        xmlns:we="clr-namespace:project1"
       ...>    
        <Grid x:Name="LayoutRoot" Background="{StaticResource PhoneChromeBrush}"></Grid>
    </we:WidgetsUserControl>