很难想出一个简洁的标题!
我在一个解决方案中有两个WPF项目。第一个,WpfApplication定义了Class1。第二,WpfControlLibrary定义继承自Class1的Class2,继承自Class2的Class3和UserControl1。它们如下所示:
WpfApplication Class1
namespace WpfApplication5
{
public class Class1
{
public string Property1 { get; set; }
}
}
WpfControlLibrary Class2和Class3
namespace WpfControlLibrary1
{
public class Class2
{
public string Property2 { get; set; }
}
public class Class3 : Class2
{
public string Property3 { get; set; }
}
}
总之,Class 1有Property1,Class2有Property1(通过继承)和Property2,Class3有Property1和Property2(都是继承)和Property3。用户控件的XAML是:
<UserControl x:Class="WpfControlLibrary1.UserControl1"
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:b="clr-namespace:WpfApplication5;assembly=WpfApplication5"
xmlns:l="clr-namespace:WpfControlLibrary1"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<b:Class1 x:Key="test1" Property1="xxx" />
<l:Class2 x:Key="test2" Property1="xxx" Property2="yyy" />
<l:Class3 x:Key="test3" Property2="yyy" Property3="zzz" />
<l:Class3 x:Key="test4">
<l:Class3.Property1>xxx</l:Class3.Property1>
<l:Class3.Property2>yyy</l:Class3.Property2>
<l:Class3.Property3>zzz</l:Class3.Property3>
</l:Class3>
</UserControl.Resources>
<Grid>
</Grid>
问题是XAML不会编译,并给出以下错误:
The property 'Property1' does not exist in XML namespace 'clr-namespace:WpfControlLibrary1'.
The property 'Property1' was not found in type 'Class2'.
The attachable property 'Property1' was not found in type 'Class3'.
看起来XAML无法处理从不同程序集继承的属性。这是对的,还是我一直在看它太久了。我尝试过设置Property1和事件的不同形式b:Property1=
和b:Class1.Property1=
,但似乎都没有效果。
或者我一直在看这个太长时间和过于复杂的事情?
答案 0 :(得分:0)
我将在这里添加我自己的答案,尝试解释我认为发生了什么,尽管我上面引用了一个不好的例子,对于其他任何人来说。
使用XAML从其他程序集实例化对象时,命名空间如下所示:
xmlns:b="clr-namespace:WpfApplication5;assembly=WpfApplication5"
注意它有一个名为的程序集。它似乎也将程序集复制到bin文件夹中。在我的情况下,发生了一些疯狂的事情,并且复制的程序集已经过了几个小时。因此,即使c#可以编译,XAML也不能。发生了一些魔法,在Configuration Manager中神秘地取消了这个程序集的构建。但是,再次检查并重建仍然没有重建exe。在这种兴奋期间,Visual Studio崩溃并重新启动(仅仅是我或VS2010会发生这种情况)。
最后,我不得不删除所有DLL项目并自行构建主应用程序。然后我可以重新添加DLL项目并编译。然后一切都按预期工作。