类型为'...'的值无法添加到类型为'UIElementCollection'的集合或字典中。

28

当我通过XAML添加自定义控件时,出现以下错误。可能的原因是什么?

无法将类型为“...”的值添加到类型为“UIElementCollection”的集合或字典中

<Grid x:Name="QuantityDetail" DataContext="{StaticResource ViewModel}">
    <GroupBox>
       .....
       <Label Style="{StaticResource ResourceKey=LabelValue}">Min</Label>
       <!-- The following control -->
       <NumericUpDown></NumericUpDown>
       .....
    </GroupBox>
</Grid>
           

你能展示一下你是如何定义 IonNumericUpDow 的吗? - ChrisWue
3个回答

22

问题是我没有在我的解决方案中引用一个dll(这个dll被NumericUpDown控件引用)。 实际上,NumericUpDown控件不是我的控件,它存在于不同的dll中。并且此控件引用了System.Windows.Controls.Input.Toolkit.dll。现在我在我的解决方案中引用了它,并且一切正常。


4
值得一提的是,设计师将使用项目所引用的DLL来代表设计。这意味着当一个解决方案编译和运行完美时,这个错误经常会出现 - 因为一个被上游项目引用的DLL存在于那里,即使不在你正在设计的项目中。通常这些引用是PresentationCoreWindowsBaseSystem.Xaml或偶尔的WindowsFormsIntegration中的一个或多个。 - tobriand

6

在我们的项目中,我也遇到了这个Intellisense问题(虽然仍然可以构建),但是没有外部控制。因此,也许有人需要这个答案...

“问题”在于,UserControlXYZ.xaml被声明为<UserControl>,但是UserControlXYZ.xaml.cs没有继承自UserControl。因此,我不得不在xaml.cs中添加UserControlXYZ <strong>:UserControl</strong> (即使Resharper说基类型已经指定并且可以删除)。


2
编译器声称你的控件不是UIElement(我怀疑它在撒谎),那么你的控件继承自哪个类?

问题现在已经解决了。实际上,NumericUpDown控件不是我的控件,它存在于不同的dll中。而这个控件正在引用System.Windows.Controls.Input.Toolkit.dll。现在我在我的解决方案中引用了它。一切都正常工作。 - Make It Perfect
但我仍然不确定为什么需要添加对该dll的引用。因为我并没有直接使用那个dll。事实上,NumericUpDown(存在于某人的dll中)正在使用System.Windows.Controls.Input.Toolkit.dll。 - Make It Perfect
如果您的应用程序中没有该引用,则外部控件将无法工作,它是依赖于它的。 - H.B.
你的意思是我需要在我的应用程序中添加所有外部控件的依赖项吗?不确定在所有情况下是否需要这样做。如果外部控件引用其他外部控件,那么我也需要添加该控件的依赖项。依此类推。 - Make It Perfect
1
实际上,HW,我要对你说的话提出质疑。你只需要添加对代码本身直接或间接引用的依赖项的引用,而不是其中一个依赖项所依赖的内容。他们会处理自己的依赖关系。想一想...你的项目引用的WPF DLLs本身引用了整个一堆其他DLLs,除非你也引用了这些依赖项中深层次的类,否则你不必在项目中引用它们。在那种情况下,是的,你也必须将它们添加进来。 - Mark A. Donohoe
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接