我看到了奇怪的行为。我强烈感觉这是 .net 工具链中的一个 bug。
复现步骤:
1. 创建 WPF 应用程序。 2. 在该解决方案中创建类库。 3. 在类库中定义一些公共类(可以为空)。 4. 在 WPF 应用程序中定义一些具有附加属性和 Window 作为目标类的类。 5. 将其附加到 Window 并提供值。
然后你会得到错误:
“The object 'Window' already has a child and cannot add ''. 'Window' can accept only one child.”
如果你更改结构,使具有附加属性和值类在同一程序集中(可以是 Class Library 或 Wpf Application),它就可以正常工作。
如果你将代码放在内容之后也可以正常工作。但如果你把代码放在内容之前,就会产生错误。
这并不会产生任何效果:
复现步骤:
1. 创建 WPF 应用程序。 2. 在该解决方案中创建类库。 3. 在类库中定义一些公共类(可以为空)。 4. 在 WPF 应用程序中定义一些具有附加属性和 Window 作为目标类的类。 5. 将其附加到 Window 并提供值。
然后你会得到错误:
“The object 'Window' already has a child and cannot add ''. 'Window' can accept only one child.”
如果你更改结构,使具有附加属性和值类在同一程序集中(可以是 Class Library 或 Wpf Application),它就可以正常工作。
如果你将代码放在内容之后也可以正常工作。但如果你把代码放在内容之前,就会产生错误。
<Window x:Class="WpfApplication9.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:ClassLibrary1;assembly=ClassLibrary1"
xmlns:my2="clr-namespace:ClassLibrary1"
Title="MainWindow" Height="350" Width="525">
<my2:Property.MyProperty>
<my:ValueClass />
</my2:Property.MyProperty>
<Grid>
</Grid>
</Window>
这并不会产生任何效果:
<Grid>
</Grid>
<my2:Property.MyProperty>
<my:ValueClass />
</my2:Property.MyProperty>
有什么想法吗?
谢谢!