【发布时间】:2010-12-11 13:27:58
【问题描述】:
我正在创建一系列具有相似业务逻辑的用户控件。所以我试图在一个抽象基类中实现这个通用的业务逻辑,所有这些用户控件都将从中继承。继承链看起来像这样:
System.Windows.Controls.UserControl
我在 Visual Studio 中创建了 MyControl1、MyControl2 等类作为用户控件。我已将类设置为从 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
}
在保存后在 Visual Studio 2008 编辑器中编辑 MyControl1.xaml 时,修改后的 mycontrol1.g.cs 会不断将自身恢复为原始版本(即:再次从 System.Windows.Controls.UserControl 继承)。然后编译失败,因为 MyControl1 的两个部分类没有从同一个父类继承:VS 生成的一个继承自 System.Windows.Controls.UserControl,我的代码来自 MyControlBase。
有没有办法解决这个问题?我希望能够从抽象类继承,并假设 Visual Studio 有一种方法可以让我,我只是看不到我缺少什么。或者从 System.Windows.Controls.UserControl 之外的另一个类继承的 UserControl 的概念是一个糟糕的概念?
【问题讨论】:
-
类定义行和初始 XAML 的实际代码示例会有所帮助。
-
我添加了一些代码示例,也许这会有所帮助。
标签: visual-studio visual-studio-2008 silverlight user-controls code-generation