您好我根据此处的信息创建了一些子类用户控件; 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测试版中尝试了这个,结果相同。
我没有使用反射或访问类的构造函数中的任何集合,代码就是你在这里看到的。
我有测试项目可以证明这个问题,如果有帮助吗?
谢谢....
答案 0 :(得分:0)
陷入类似的问题。我有一个带有基本UI的项目,一些项目是用户控件。 (我们称这个项目为“BaseUI”)。在我的第二个项目(我们将其称为“SubProj”)中,我可以为它添加引用并将其添加到Visual Studio中的xaml中,但我不能使用Blend来查看更改。现在我不能将它用于一些更复杂的编辑。
它产生错误“[组件名称在此处]不存在于命名空间[您引用的命名空间]”
我找到的修复程序可能允许您在子项目中继承它。
您可以使用链接将代码添加到当前程序集中,而不是尝试直接从引用的程序集中使用该类。该链接使控件的行为就像它在现有项目中一样,但代码来自基础项目。对它的任何更改都会影响所有链接。您应该能够从本地继承,而不会遇到跨项目的问题。
这是你如何做到的: