首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“FixedToolBar类型的值不能添加到‘UIElementCollection’类型的集合或字典中”,但是FixedToolBar是UIElement的子类

“FixedToolBar类型的值不能添加到‘UIElementCollection’类型的集合或字典中”,但是FixedToolBar是UIElement的子类
EN

Stack Overflow用户
提问于 2015-09-14 16:28:46
回答 1查看 2.4K关注 0票数 9

我们在类库中定义了一个名为FixedToolBar的自定义控件,它由通过XAML使用它的第二个程序集引用。但是,VS2015显示了错误:

不能将FixedToolBar类型的值添加到“UIElementCollection”类型的集合或字典中。

这是这个类本身

代码语言:javascript
运行
复制
public class FixedToolBar : Control // <-- Control is a subclass of UIElement
{
    // Bla bla
}

...and这是XAML片段..。

代码语言:javascript
运行
复制
<DockPanel>

    <c:FixedToolBar x:Name="MainToolBar" DockPanel.Dock="Top">
        <Button Header="Test 1" />
        <Button Header="Test 2" />
    </c:FixedToolBar>

    <ListBox x:Name="MainListBox" />

</DockPanel>

更奇怪的是,它只显示在打开XAML编辑器时的错误,但其他情况下编译和运行都很好!

知道为什么吗?让VS在设计时报告所有这些错误真的很烦人。所有这些红色的谎言使XAML da@n几乎不可读!

EN

回答 1

Stack Overflow用户

发布于 2020-08-14 13:01:48

有传言说,这些幻影错误通常出现在以下情况下:

  • 你的xaml在A项目中。
  • 项目A在其参考资料中包括项目B。
  • 要添加到集合中的元素的类型在项目B中定义。
  • 元素的类型取决于项目C中的某种类型。
  • 项目A在其参考资料中没有明确包括项目C。(因为它不必这么做。)

就构建系统而言,这根本不是一个问题,因为项目A的依赖关系是递归计算的,因此它们包含依赖项的依赖项,因此项目C当然会包括在内。

但显然xaml子系统出于某种无法理解的原因,需要自己解决项目依赖关系,而且它不够聪明,无法递归地解决它们。

解决方案是使项目A明确引用项目C,尽管它没有使用它。

还请注意,在尝试这样做时,您可能会遇到进一步的复杂情况,例如,如果您编辑A.csproj以将一个PackageReference添加到项目B,并重新加载项目A,则该引用可能不会出现在“引用”下,在这种情况下,幻影陷阱不会消失。一个适当的完全干净的重建倾向于解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32569570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档