c# generics xaml .net-4.0 wpf-4.0

c# - Problema con x: TypeArguments y clase de lista genérica en XAML



generics .net-4.0 (2)

Creé el siguiente marcado para un archivo XAML suelto.

<StackPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib"> <scg:List x:TypeArguments="sys:String"> HelloWorld </scg:List> </StackPanel>

Pero obtengo este error cuando ejecuto el XAML suelto en IE:

La etiqueta ''Lista'' no existe en el espacio de nombres XML ''clr-namespace: System.Collections.Generic; assembly = mscorlib''. Línea ''7'' Posición 2 ''.

Como sabrá, los genéricos en XAML son una característica de XAML 2009 y pueden funcionar en su mayor parte solo en archivos XAML sueltos. Pero el código anterior no funciona.

¿Alguna pista de por qué ocurrió este error y cómo rectificar el problema? Gracias por adelantado.


Acabo de probar su muestra con Internet Explorer 9. IE9 usa PresentationHost.exe para representar el contenido y en mi sistema (Windows 7 SP1 x64), y al examinar qué ensamblajes están realmente cargados, confirmé que usa el marco v3.0 que no es compatible con XAML 2009.

La documentación describe que para XBAPs elige qué versión de framework cargar y por lo tanto es claramente capaz de usar el framework v4.0 que sí es compatible con XAML 2009 para XAML suelto. Sin embargo, lamentablemente, la documentación no indica qué versión del marco elegirá para XAML suelto en lugar de XBAP.

Empíricamente, al menos con su muestra, puedo confirmar que PresentationHost.exe elige el framework v3.0. No puedo encontrar ninguna manera de anular esta selección, por ejemplo anotando el XAML de alguna manera.


El problema ha sido resuelto. Necesitaba incluir el siguiente mapeo del espacio de nombres en el marcado para permitir el uso de genéricos.

xmlns: v4 = "http://schemas.microsoft.com/netfx/2009/xaml/presentation"

Ahora funciona bien.