类型引用找不到名为的公共类型

时间:2012-05-04 05:27:56

标签: c# wpf xaml

我收到错误,例如“类型引用无法在xaml中找到名为'Sign'的公共类型”。我怎么解决它。 Sign类在同一个程序集中。

<DataTemplate DataType="{x:Type local:Sign}">
    <Expander Padding="4"
              IsExpanded="{Binding RelativeSource={
                    RelativeSource Mode=FindAncestor, AncestorType={
                       x:Type ListBoxItem}}, Path=IsSelected}">
        <Expander.Header>
            <TextBlock Text="{Binding Name}" ... />
        </Expander.Header>
        <DockPanel LastChildFill="True">
            <Border DockPanel.Dock="Left" CornerRadius="16" BorderBrush="WhiteSmoke" Background="AliceBlue" BorderThickness="5" HorizontalAlignment="Center" VerticalAlignment="Center">
                <Image Source="{Binding Icon}" Width="90" Height="90" Stretch="Fill" />
            </Border>
            ...
        </DockPanel>                
    </Expander>

6 个答案:

答案 0 :(得分:52)

如果类型与您正在修改的XAML位于同一个程序集中,请在导入命名空间时省略clr-namespace的程序集段。

<强> DO

xmlns:local="clr-namespace:NamespaceContainingSignClass"

不要

xmlns:local="clr-namespace:NamespaceContainingSignClass;assembly=AssemblyContainingSignClassAndXAML"

答案 1 :(得分:13)

对于那些在我的船上没有得到谷歌这个错误的前1,00个结果帮助的人....在我的情况下,它与冶炼的建议完全相反:我不得不添加装配信息在我的xmlns声明的末尾。可能是因为我的特殊情况,我猜 - 我的datatemplate是在一个独立的resourcedictionary xaml文件中。不确定。我只是知道它没有工作直到我添加了汇编信息,所以对于那些挣扎的人来说,给那个打击,看看它是否有效。我不倾向于深入研究为什么,它只是这样做。

答案 2 :(得分:7)

  1. 检查xaml文件的根标记是否具有映射到Sign别名的local类的名称空间:xmlns:local="clr-namespace:NamespaceContainingSignClass"
  2. 检查班级Sign是否已标记为public
  3. 检查班级Sign是否具有无参数构造函数

答案 3 :(得分:2)

  1. 仔细检查这个问题的所有答案 - 我确定其中一个是正确的,但我不知道哪一个对我有效。
  2. 保存项目,关闭Visual Studio,重新打开Visual Studio。
  3. Voila,尽管没有改变任何东西,它现在神奇地起作用。
  4. 在微软的呼吸下发誓,继续你的生活......

答案 4 :(得分:0)

我刚刚发现了另一个问题,可能会导致此问题。 允许在项目名称中使用点,例如

FancyTrainsimTools.Desktop

是有效的项目名称。如果您在项目中使用文件夹,则可能会获得以下结构:

FancyTrainsimTools.Desktop.Logic

如果定义引用此文件夹中项目的数据模板,则会导致错误消息。我还使用了分层数据模板,但这给出了稍微不同的消息。

解决方法:

通过删除点来重命名您的项目:

FancyTrainsimToolsDesktop

编辑:为了报告错误,我尝试重现此问题,但现在一切正常....至今尚未解决之谜,也不清楚如何在周围创建工作.... < / p>

答案 5 :(得分:0)

现在遇到了这个错误。问题是我从我的程序集中引用的类位于具有更高框架级别(4.7.2 对 4.6)的程序集中。版本对齐解决了问题。