[英]C# UserControl Inheritance
使用VS.NET 2008,输出类型为Class Library,目标框架为.NET 2.0
我提出了一个简化的方案来问这个问题。
我有一个Button
用户控件,它是一个简单的面板,上面有一个大按钮。
我想创建一个扩展Button
的RedButton
控件,以及一个类似的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.