2012-05-04 32 views
18

Recibo un error como "Tipo de referencia no puede encontrar un tipo público llamado 'Firmar'" en xaml. Cómo puedo resolverlo. la clase Sign está en el mismo conjunto.Tipo de referencia no puede encontrar el tipo público llamado

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

+4

¿Se acordó agregar el espacio de nombres local en la parte superior de esta manera? 'Xmlns: locales = "CLR-espacio de nombres: MyNamespace"' –

Respuesta

45

Si el tipo reside en el mismo ensamblaje que el XAML que está modificando, omita el segmento de ensamblaje del espacio de nombres clr cuando importe el espacio de nombres.

DO

xmlns:local="clr-namespace:NamespaceContainingSignClass" 

NO

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

Eso funcionó para mí. ¿Puedes dar una explicación de por qué no se puede encontrar la referencia de tipo? –

+1

@DennisKassel No sé por qué funciona de esa manera. Si tuviera que especular, diría que si se omite el ensamblaje, busca en el ensamblaje que contiene el XAML, y si se especifica el ensamblaje, busca a través de los ensamblajes referenciados para el ensamblaje especificado y lo busca. Como el ensamblaje actual no se encuentra en los ensamblados a los que se hace referencia, no puede encontrarlo. Algo raro así en la implementación actual. – smelch

+0

Gracias por tu comentario. Hace unos días, también recibí una confirmación de un libro que dice que debe omitir el nombre del ensamblado cuando el espacio de nombres reside en el mismo ensamblaje. –

6
  1. Comprobar si la etiqueta raíz del archivo XAML tiene el espacio de nombres con la clase Sign asignada a local alias: xmlns:local="clr-namespace:NamespaceContainingSignClass"
  2. Compruebe si la clase Sign está marcado public
  3. Compruebe si la clase Sign tiene constructor sin parámetros
+0

Wow! Constructor sin parametros! Gracias. Me pregunto por qué requisitos tan extraños y cómo lo aprendieron. –

+2

Este requisito se basa en el hecho de que no puede especificar parámetros de constructor en XAML. Cuando escribe

12

Para aquellos en mi barco que no fueron ayudados por los 1,00 primeros resultados de este error en Google ... .en mi caso era exactamente lo opuesto al consejo de smelch: tuve que AGREGAR la información de ensamblaje al final de mi declaración xmlns. Probablemente debido a mis circunstancias particulares, supongo que mi datatemplate estaba en un archivo xaml de recursos resourcedictionary independiente. No es seguro. Solo sé que no funcionó hasta Agregué la información de ensamblaje, por lo que para aquellos que se tambalean por ahí dan un golpe y ver si funciona. No me inclino a bucear por qué, simplemente lo hice.

+0

He aclarado mi respuesta. Solo omite el nombre del ensamblado si la clase está en el mismo ensamblaje que el XAML. – smelch

+4

Me he encontrado con este problema yo mismo, * agregando * el nombre del ensamblaje también solucionó el problema. El mío está en un archivo ResourceDictionary xaml en el mismo ensamblaje que la clase, pero aún necesitaba el nombre del ensamblado para ser agregado. –

+0

¡Gracias! También utilicé ResourceDictionary y quería cargarlo dinámicamente. Acabo de agregar "; assembly = ..." y cambié el proceso de compilación a "None" en lugar de "Page" y funcionó bien. Por alguna razón, tuve que cambiar el proceso de compilación para compilar el programa. De lo contrario, habría arrojado errores extraños. –

1
  1. Revise todas las respuestas a esta pregunta - Estoy seguro de que una de ellas es correcta, pero no sé cuál me funcionó.
  2. Guarde su proyecto, cierre Visual Studio, vuelva a abrir Visual Studio.
  3. Voila, ahora funciona mágicamente, a pesar de no cambiar nada.
  4. Juro a Microsoft en voz baja, y seguir adelante con su vida ...
Cuestiones relacionadas