繁体   English   中英

C#UserControl继承

[英]C# UserControl Inheritance

使用VS.NET 2008,输出类型为Class Library,目标框架为.NET 2.0

我提出了一个简化的方案来问这个问题。

我有一个Button用户控件,它是一个简单的面板,上面有一个大按钮。

我想创建一个扩展ButtonRedButton控件,以及一个类似的GreenButton
例如Class RedButton : Button

理想情况下,当我打开RedButton的设计器时,我将看到我在Button创建的Button并且能够对其进行修改,例如将其设置为Red或更改字体等。

我曾经尝试这样做,但是当我打开RedButton的设计器时,我只会遇到很多错误。

在这种情况下,以编程方式完成所有这些工作对我们来说是不可行的,因为在实际情况下,这将很痛苦。

有人可以阐明这一点吗? 非常感谢。

确实,您的示例应该可以正常工作。 只需确保为派生类提供默认构造函数即可。 还要确保您不使用通用控件,因为设计者将不知道如何创建它的实例。

您的装配设置是否需要延迟签名? 查找延迟签名属性以及项目属性中的复选框。 我已经看到延迟签名导致VS2005出现这种问题,也许在VS2008中仍然是一个问题。

在一家老公司,我不得不处理这个问题多年。 那时我研究了一下。 我认为没有解决方案。

我不知道您要在实际示例中扩展基类的数量,但是您在示例中提到的更改将是微不足道的。 就像

btnTheButton.BackGround=Color.Red; 

实际上,您可能需要在几分钟内完成对按钮所做的任何更改。 不幸的是,每次您需要继承一个新控件都需要几分钟,但是我认为这是唯一的选择

如果您从中继承的控件来自DLL,而不仅仅是解决方案中的另一个类,则设计人员将正确呈现继承的控件。 我的猜测是,VS设计视图需要DLL来绘制控件。 可能还有其他方法可以解决此问题。

如果您还没有,请遵循以下示例:

public class RedButton : Button

然后在XAML中而不是

<UserControl></UserControl>

开始/结束您的XAML文件

<Button></Button>

请注意,即使您尚未定义名称空间,也可以从另一个名称空间中的内容继承。 例:

<radDock:RadPane ...            
        xmlns:radDock="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.Docking"
        ...
        Title="{Binding Path=StudyTitle}"...

从VS.NET 2008开始,根设计器便能够显示“错误束”,如您所提到的。 通常,所描述的场景应该“正常工作”。

您遇到什么样的错误?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM