简体   繁体   中英

Type reference cannot find public type named

I am getting error like "Type reference cannot find public type named 'Sign'" in xaml. how can i resolve it. the Sign class is in the same assembly.

<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>

If the type resides in the same assembly as the XAML you are modifying, omit the assembly segment of the clr-namespace when you import the namespace.

DO

xmlns:local="clr-namespace:NamespaceContainingSignClass"

DO NOT

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

For those in my boat who weren't helped by the top 1,00 results for this error on Google....in my case it was the precise opposite of the advice from smelch: i had to ADD the assembly info on the end of my xmlns declaration. Likely because of my particular circumstances, i guess - my datatemplate was in a stand-alone resourcedictionary xaml file. Not sure. I just know it didn't work until i added the assembly info, so for those floundering out there give that a whack and see if it works. i'm not inclined to dive into why, it just did.

  1. Check if the root tag of the xaml file has the namespace with class Sign mapped to local alias: xmlns:local="clr-namespace:NamespaceContainingSignClass"
  2. Check whether class Sign is marked public
  3. Check whether class Sign has parameterless constructor
  1. Go through and check all of the answers to this question - I'm sure one of them is right, but I don't know which one worked for me.
  2. Save your project, close Visual Studio, re-open Visual Studio.
  3. Voila, it now magically works, despite not changing anything.
  4. Swear at Microsoft under your breath, and carry on with your life...

I just discovered another issue, that may cause this problem. It is allowed to use dots in project names, eg

FancyTrainsimTools.Desktop

is a valid project name. If you use folders in the project, you may get constructs like this:

FancyTrainsimTools.Desktop.Logic

If you define data templates referencing items in this folder, this results in error messages. I also used a hierarchical datatemplate, but this gives slightly different messages.

The workaround:

Rename your project by removing the dot:

FancyTrainsimToolsDesktop

Edit: I try to reproduce the issue again, in order to report a bug, but now it all works.... So mystery not yet solved and not clear what to do to create w ork around....

Ran into this error right now. The problem was that the class I was referencing from my assembly was in an assembly that had a higher framework level(4.7.2 against 4.6). Version alignment solved the problem.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM