使用Silverlight用户控件的部分类实现继承

6
我正在尝试让几个类继承一个更通用的Silverlight用户控件,以避免代码中的冗余。这些类继承了扩展控件,而扩展控件又继承了用户控件类。我遇到的问题是每次编译时,ExtendedControlExtension.g.cs文件都会重新生成,并且继承关系不正确(它继承了用户控件而不是我的扩展控件)。
请注意,我已经在.cs和g.cs文件中继承了扩展控件,但在.aspx文件中继续使用用户控件标签,因为这会导致错误:
错误 29:XML命名空间'http://schemas.microsoft.com/winfx/2006/xaml/presentation'中不存在“ExtendedControl”标记。
有没有办法解决这个问题?
谢谢!
1个回答

9

您不能更改.g.cs文件,实际上文件中已经说明了。此外,使用术语“自定义控件”是不幸的,因为它表示特定的内容,而不是您想要做的事情。但好消息是,您想要做的事情是可能的。

UserControl派生:

public class FancyUserControl : UserControl
{
    // Your added common functionality.
}

然后使用正常机制向您的项目中添加一个新的UserControl,假设为UserControl1。 然后按照以下方式编辑UserControl.xaml文件:

<local:FancyUserControl x:Class="SilverlightApplication1.UserControl1"
    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"
    xmlns:local="clr-namespace:SilverlightApplication1"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">

    </Grid>
</local:FancyUserControl>

特别注意其中带有local的三行,根据您的应用进行调整。然后按照以下步骤编辑UserControl1.xaml.cs文件:

public partial class UserControl1 : FancyUserControl
{
    public UserControl1()
    {
        InitializeComponent();
    }
}

现在,重新构建你的项目,Visual Studio 可能不会很高兴,但最终一切都会好起来。

UserControl1 现在派生自 FancyUserControl 而不是 UserControl,你可以开始添加你的公共功能。要添加更多控件,你需要在每次将新控件添加到项目后手动编辑 XAML 和代码后台。


谢谢你的非常完整的回答(我知道你不应该编辑.gs文件,但这是我找到实现所需功能的唯一方法,直到你回答了我的问题)! - badpanda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接