2010-11-24 9 views
31

en un XAML archivo (un control de usuario WPF), hay una manera de hacer referencia a un clase interna "B" se define en otra clase "A"?Creación de una instancia de una clase anidada en XAML

public class A 
{ 
    public class B 
    { 
    } 
} 

Algo así como:

<local:A.B ... /> 

Esta sintaxis no funciona porque "B" se interpreta como una propiedad denominada "B" en la clase "A".

He intentado con sintaxis más exóticas como "::" o "+" pero ninguna parece funcionar.

Actualmente estoy usando Silverlight 4 con VS2010.

Gracias de antemano por su ayuda.

+0

¿es la clase B otro control? –

+0

No, es un comando, pero podría serlo. – Pragmateek

+1

No estoy muy familiarizado con WPF al mando, en la respuesta a esta pregunta, el operador de punto se utiliza para obtener el comando: http://stackoverflow.com/questions/601393/custom-command-wpf Pero, los comandos son definido en una clase diferente. –

Respuesta

31

Estaba buscando y buscando, porque si esto es posible, me gustaría saber. Por desgracia, he encontrado esto en msdn:

la clase personalizada no debe ser una clase anidada . Las clases anidadas y el "punto" en su sintaxis general de uso de CLR interfieren con otras características de WPF y/o XAML , como las propiedades adjuntas.

lo tanto, parece que no se puede hacer referencia a una clase anidada con el operador punto. En cuanto a las formas alternativas de llegar a esa clase interna a través de XAML, todavía no he tenido suerte en mis búsquedas. : o (Pero este es un tema bastante interesante, así que continuaré buscando. Tal vez encuentre algo de suerte!: o)

+0

Gracias por su respuesta. Tenía miedo de este tipo de respuesta, pero según esta cita parece que tienes razón. – Pragmateek

+0

Esto es "en general" pero [en mi código concreto] (http://stackoverflow.com/questions/14546347/how-to-use-nested-class-in-wpf-xaml) Tengo muchos "puntos" "en mi XAML.Además, dice que "la clase personalizada no debe ser una clase anidada", pero la pregunta no es sobre la clase personalizada anidada sino sobre la clase personalizada que contiene la clase anidada –

+0

Lo que considero extraño es que no se creó una advertencia como "XAML no admitir clases anidadas "o" clases anidadas no son compatibles ". En cambio, tienes que resolverlo e ir a Stack Overflow esto. Un poco molesto ... – florien

36

Esta pregunta es bastante antigua, y no sé si hubiera funcionado con la versión de WPF en el 2010, pero ahora se puede hacer que funcione utilizando el nombre "real" (interno) del tipo anidado:

<local:A+B /> 

Si alguna vez has mirado un código desensamblado, así es como anidada tipos se ven como:

ParentTypeName+Nested 
+0

Parece que no funciona en Silverlight. Obtengo un carácter '+', valor hexadecimal 0x2B, no se puede incluir en un nombre 'error del analizador. – jspaey

+0

No estoy seguro de lo que quiere decir con "real" o "interno", pero los metadatos no almacenan el nombre de la clase adjunta en el mismo campo que el nombre de la clase anidada, y mucho menos el uso de '+' como separador . El '+' que ve es agregado por el desensamblador. –

+0

@Ludovic: tampoco funciona en WPF. –

Cuestiones relacionadas