XAML 类型引用找不到名为

icnyk63a  于 2023-05-27  发布在  其他
关注(0)|答案(7)|浏览(229)

我在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>
hmmo2u0o

hmmo2u0o1#

如果该类型与要修改的XAML驻留在同一程序集中,则在导入命名空间时省略clr命名空间的程序集段。

xmlns:local="clr-namespace:NamespaceContainingSignClass"

请勿

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

mefy6pfw2#

对于那些在我船上的人,他们没有得到谷歌上这个错误的前1,00个结果的帮助......在我的情况下,这与smelch的建议完全相反:我必须在xmlns声明的末尾添加程序集信息。我想可能是因为我的特殊情况我的datatemplate在一个独立的resourcedictionary xaml文件中。不确定。我只知道它没有工作 * 直到 * 我添加了汇编信息,所以对于那些挣扎在那里给予一个重击,看看它是否工作。我不想深究原因,但它就是这么做了。

dy1byipe

dy1byipe3#

1.检查xaml文件的根标签是否具有类SignMap到local别名的命名空间:xmlns:local="clr-namespace:NamespaceContainingSignClass"
1.检查类Sign是否标记为public
1.检查类Sign是否有无参数构造函数

uqxowvwt

uqxowvwt4#

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

sf6xfgos

sf6xfgos5#

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

slsn1g29

slsn1g296#

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

FancyTrainsimTools.Desktop

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

FancyTrainsimTools.Desktop.Logic

如果定义引用此文件夹中的项目的数据模板,则会导致错误消息。我还使用了一个分层的数据模板,但它给出的消息略有不同。
解决办法:
通过删除点重命名项目:

FancyTrainsimToolsDesktop

编辑:我试着再次重现这个问题,为了报告一个bug,但现在一切正常。所以谜团还没有解开,也不清楚该怎么做来创造周围的工作。

rks48beu

rks48beu7#

还有一件事要检查,因为我今天刚刚解决了同样的问题...出于某种原因,我们添加了一个xaml文件,其中的构建操作是Resource而不是Page。在那个文件中,而且只有那个文件,我们必须在名称空间声明中使用assembly=才能使它工作。自从13年前添加该文件以来,它一直是相同的,其中的一切似乎都很好,直到现在我们才注意到任何问题。
我们遇到的问题是,我们正在创建一个.NET 6版本的DLL,新项目具有所有相同的代码和xaml文件,但不是该项目的.NET Framework版本的直接克隆。按照设置的方式,有问题的XAML文件的编译方式与所有其他文件相同,这意味着它不能在名称空间中包含assembly= part。所以有一段时间,我被误导认为这可能是.NET 6与.NET Framework项目的差异。幸运的是,我注意到XAML文件在项目的旧版本中被设置为Resource,一旦我修复了这个问题,在项目的两个版本中一切都正常(assembly=已删除)。

相关问题