Pregunta

Mi conjunto incluye una imagen con BuildAction recursos ==. Quiero obtener una BitmapImage de este recurso incrustado.

puedo cargar un archivo BitmapImage de la siguiente manera:

var bitmap = new BitmapImage(new Uri(path));

Pero, ¿cómo puedo crear un URI que se referirá a una imagen recurso incrustado?

Cuando intento crear un ' empacar URI ' (por ejemplo pack://application:,,,/MyImage.png o pack://application:,,,/MyAssembly;component/MyImage.png), se produce una excepción:

System.UriFormatException "URI no válido: Se esperaba que un puerto debido a que hay dos puntos ( ':'). Presentes pero el puerto no se pudo analizar"

he encontrado la solución, a la UriFormatException en este Entrada de blog

Sin embargo, con ese corrección aplicada, todavía consigo excepciones tratando de cargar un BitmapImage de un paquete URI.

Cuando se utiliza el formato de pack://application:,,,/Image.png, consigo un NullReferenceException, y cuando se utiliza el formato de pack://application:,,,/AssemblyName;component/Image.png, consigo un NotSupportedException "El prefijo Uri no es reconocido".


Resumen Mi problema era que yo estaba tratando de usar un 'paquete URI' en un proceso antes de cualquier control de WPF / ventana / etc había creado una instancia, por lo que el esquema de 'pack' URI aún no estaba registrado (otra WPF requiere 'cosas' tampoco debe ser demasiado puesto que registrarse manualmente el esquema de paquete por sí mismo no resuelve el problema). La solución era esperar hasta después de crear instancias de mi usercontrol WPF usar URI del paquete.

¿Fue útil?

Solución

Esta página de MSDN tiene toda la información que desee saber acerca de los URI de recursos en WPF (a menudo llamado URI del paquete). Vas a querer utilizar relativa URI con más frecuencia, probablemente, por lo que ver Tabla 4 , que debe ser de uso particular.

Si desea una descripción breve de recursos URI (pack), consulte esta entrada de blog . Esto demuestra que la sintaxis es de hecho relativamente simple:

pack://application:,,,/ResourceFile.xaml

pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml

Sin embargo, hay algunas peculiaridades de trabajar a cabo (en mi experiencia), por lo que a menudo encontrar el recurso correcto URI requiere un poco de experimentación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top