我在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>
7条答案
按热度按时间hmmo2u0o1#
如果该类型与要修改的XAML驻留在同一程序集中,则在导入命名空间时省略clr命名空间的程序集段。
做
请勿
mefy6pfw2#
对于那些在我船上的人,他们没有得到谷歌上这个错误的前1,00个结果的帮助......在我的情况下,这与smelch的建议完全相反:我必须在xmlns声明的末尾添加程序集信息。我想可能是因为我的特殊情况我的datatemplate在一个独立的resourcedictionary xaml文件中。不确定。我只知道它没有工作 * 直到 * 我添加了汇编信息,所以对于那些挣扎在那里给予一个重击,看看它是否工作。我不想深究原因,但它就是这么做了。
dy1byipe3#
1.检查xaml文件的根标签是否具有类
Sign
Map到local
别名的命名空间:xmlns:local="clr-namespace:NamespaceContainingSignClass"
1.检查类
Sign
是否标记为public
1.检查类
Sign
是否有无参数构造函数uqxowvwt4#
1.仔细检查一下这个问题的所有答案--我确信其中一个是正确的,但我不知道哪个对我有用。
1.保存项目,关闭Visual Studio,重新打开Visual Studio。
1.瞧,它现在神奇地工作了,尽管没有改变任何东西。
1.在你的呼吸下发誓在微软,并继续你的生活。
sf6xfgos5#
现在遇到了这个错误。问题是我从程序集中引用的类位于一个框架级别更高的程序集中(4.7.2对4.6)。版本对齐解决了这个问题。
slsn1g296#
我刚刚发现了另一个问题,可能会导致这个问题。允许在项目名称中使用点,例如
是有效的项目名称。如果在项目中使用文件夹,则可能会获得如下构造:
如果定义引用此文件夹中的项目的数据模板,则会导致错误消息。我还使用了一个分层的数据模板,但它给出的消息略有不同。
解决办法:
通过删除点重命名项目:
编辑:我试着再次重现这个问题,为了报告一个bug,但现在一切正常。所以谜团还没有解开,也不清楚该怎么做来创造周围的工作。
rks48beu7#
还有一件事要检查,因为我今天刚刚解决了同样的问题...出于某种原因,我们添加了一个xaml文件,其中的构建操作是Resource而不是Page。在那个文件中,而且只有那个文件,我们必须在名称空间声明中使用assembly=才能使它工作。自从13年前添加该文件以来,它一直是相同的,其中的一切似乎都很好,直到现在我们才注意到任何问题。
我们遇到的问题是,我们正在创建一个.NET 6版本的DLL,新项目具有所有相同的代码和xaml文件,但不是该项目的.NET Framework版本的直接克隆。按照设置的方式,有问题的XAML文件的编译方式与所有其他文件相同,这意味着它不能在名称空间中包含assembly= part。所以有一段时间,我被误导认为这可能是.NET 6与.NET Framework项目的差异。幸运的是,我注意到XAML文件在项目的旧版本中被设置为Resource,一旦我修复了这个问题,在项目的两个版本中一切都正常(assembly=已删除)。