我创建了一系列UserControls,它们都有一些类似的业务逻辑。所以我试图在一个抽象基类中实现这个通用业务逻辑,所有这些用户控件都将继承它。继承链看起来是这样的:当不继承时,Visual Studio覆盖UserControl父System.Windows.Controls.UserControl
System.Windows.Controls.UserControl < - MyControlBase(摘要)< --MyControl1,MyControl2等
我创建了MyControl1,MyControl2等类作为Visual Studio中的用户控件。我已经设置类从MyControlBase而不是System.Windows.Controls.UserControl继承。它工作得很好......直到我在XAML中进行更改并重新保存。 Visual Studio 2008然后重新分配生成的类以从System.Windows.Controls.UserControl继承。
类和XAML的代码示例如下:
// MyControlBase.cs:
public abstract class MyControlBase.Windows.Controls.UserControl
{
public abstract void DoOperation1();
}
// MyControlBase.xaml: none
// MyControl1.cs:
public partial class MyControl1: MyControlBase
{
public MyControl1()
{
InitializeComponent();
}
public override void DoOperation1()
{
return;
}
}
// MyControl1.xaml:
<UserControl x:Class="Test.Controls.BarChart"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid x:Name="LayoutRoot" Background="Blue">
</Grid>
</UserControl>
// mycontrol1.g.cs (generated by Visual Studio) orginally
public partial class MyControl1: System.Windows.Controls.UserControl
{
internal System.Windows.Controls.Grid LayoutRoot;
// InitilizeComponent() etc
}
// mycontrol1.g.cs (generated by Visual Studio) modified by me
public partial class MyControl1: MyControlBase
{
internal System.Windows.Controls.Grid LayoutRoot;
// InitilizeComponent() etc
}
每当它保存修改后mycontrol1.g.cs在Visual Studio 2008编辑器中编辑MyControl1.xaml保持自身恢复到原来的一个(命名:从System.Windows.Controls.UserControl再次继承)。然后编译失败,因为MyControl1的两个部分类不是从同一个父类继承的:VS生成的继承自System.Windows.Controls.UserControl,我的代码来自MyControlBase。
有没有办法解决这个问题?我希望能够从一个抽象类继承,并假定Visual Studio有一种方法让我,我只是不明白我错过了什么。或者是UserControl从另一个类继承的概念,而不是System.Windows.Controls.UserControl是一个坏概念?
您的类的实际代码示例定义行和初始XAML将有所帮助。 – AnthonyWJones 2009-10-30 13:13:38
我已经添加了一些代码检查,也许这有助于。 – 2009-10-30 14:10:39