【问题标题】:"A value of type FixedToolBar cannot be added to a collection or dictionary of type 'UIElementCollection'" but FixedToolBar is a subclass of UIElement“FixedToolBar 类型的值不能添加到 'UIElementCollection' 类型的集合或字典中”,但 FixedToolBar 是 UIElement 的子类
【发布时间】:2015-12-10 17:40:15
【问题描述】:

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

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

这是类本身

public class FixedToolBar : Control // <-- Control is a subclass of UIElement
{
    // Bla bla
}

...这里是 XAML sn-p...

<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 几乎无法阅读!

【问题讨论】:

  • 致对此投反对票的人...想解释一下原因吗?
  • 这里有各种控件的相同问题。关于这个问题的任何更新吗?这似乎会导致我们的客户端解析 BAML 时出现运行时问题。
  • @MarqueIV 我今天遇到了这个问题。我所要做的就是卸载我的项目并重新加载它。显然,当我在项目中添加外部引用时,就会发生这种情况。通过执行上述步骤,Visual Studio 将新的 .dll 完全接受到我的项目中。干杯!

标签: wpf xaml controls visual-studio-2015 uielement


【解决方案1】:

据传,这些幻象错误曲线经常出现在以下场景中:

  • 您的 xaml 位于项目 A 中。
  • 项目 A 在其引用中包含项目 B。
  • 要添加到集合中的元素的类型在项目 B 中定义。
  • 元素的类型取决于项目 C 中的某些类型。
  • 项目 A 未在其引用中明确包含项目 C。 (因为它不是必须的。)

就构建系统而言,这根本不是问题,因为项目A的依赖是递归计算的,所以包含了依赖的依赖,所以项目C当然会包含进来。

但显然,xaml 子系统出于某种深不可测的原因,需要自行解决项目依赖关系,并且它还不够聪明,无法递归解决它们。

解决方案是让项目 A 显式引用项目 C,尽管它不使用它。

还要注意,在尝试这样做时,您可能会遇到更多复杂情况,例如,如果您编辑 A.csproj 以将 PackageReference 添加到项目 B,然后重新加载项目 A,则该引用可能不会出现在“参考”,在这种情况下,幻影曲线不会消失。一个适当的完全干净的重建往往会解决这个问题。

【讨论】:

  • 我将不得不重新访问该代码库,看看这是否解决了它。真的很烦人。
猜你喜欢
  • 2011-08-14
  • 2014-09-07
  • 2019-03-02
  • 1970-01-01
  • 2015-12-18
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
  • 2019-12-27
相关资源
最近更新 更多