嗨,我根据此处找到的信息创建了一些子类用户控件;http://csharpsimplified.wordpress.com/2011/09/21/subclassing-wpf-user-control/但我遇到了问题。
这是我在 TestUserControl 项目中的基类。
namespace TestUserControl
{
public class BaseDataGridControl : UserControl
{
protected BaseDataGridControl()
{
}
}
}
这是我的具体课程;
<view:BaseDataGridControl x:Class="TestUserControl.Concrete"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:view="clr-namespace:TestUserControl"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Button Height="20" Width="60" Margin="12,12,228,268" />
</Grid>
</view:BaseDataGridControl>
这个控制代码后面看起来像这样;
public partial class Concrete : BaseDataGridControl
{
public Concrete()
{
InitializeComponent();
}
}
我可以将我的具体类放到同一个 TestUserControl 项目中的窗口上,而不会出现任何问题;
<Window x:Class="TestUserControl.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" xmlns:my="clr-namespace:TestUserControl">
<Grid>
<my:Concrete HorizontalAlignment="Left" Margin="88,39,0,0" x:Name="concrete1" VerticalAlignment="Top" />
</Grid>
</Window>
这一切都很好。
问题是当我尝试在另一个项目中使用具体类时。
如果我创建另一个项目(WPFApplication1)并基于具体类创建一个类,例如
namespace WpfApplication1
{
public class SubClass : Concrete
{
}
}
当我尝试将其放到 WPFApplication1 项目中的窗口上时,我得到一个;
“枚举数无效,因为集合已更改”
如果我尝试通过 XAML 添加它,我会得到一个
'组件'WpfApplication1.SubClass'没有由URI'/TestUserControl;component/concrete.xaml'标识的资源。
错误信息。
WPFApplication1 项目具有对 TestUserControl 项目的引用。
有没有人知道为什么这在定义用户控件的项目中有效,但是一旦您尝试在单独的项目中对其进行子类化,它就会失败?
我已经在 VS2010 和 VS11 beta 中尝试过这个,结果同样糟糕。
我没有使用反射或访问类的构造函数中的任何集合,代码就是您在此处看到的。
我有一个演示这个问题的测试项目,如果它有帮助吗?
谢谢 ....