2016-02-11

Pack URIs in WPF


Apunte sobre como establecer una imagen incrustada en un recuso en WPF original


la solución - Pack URIs.

Image finalImage = new Image();
finalImage.Width = 80;
...
BitmapImage logo = new BitmapImage();
logo.BeginInit();
logo.UriSource = new Uri("pack://application:,,,/AssemblyName;component/Resources/logo.png");
logo.EndInit();
...
finalImage.Source = logo;


El URI se divide en partes:
  • Autoridad: application:///
  • Ruta de acceso: El nombre de un archivo de recursos que se compila en una referencia de ensamblado. La ruta de acceso debe ajustarse al siguiente formato: AssemblyShortName[;Version][;PublicKey];component/Path
    • AssemblyShortName: el nombre corto para la referencia de ensamblado.
    • ;Versión [opcional]: la versión de la referencia de ensamblado que contiene el archivo de recursos. Este se utiliza cuando dos o más ensamblados con el mismo nombre corto de la carga.
    • ;Clavepublica [opcional]: la clave pública que se utiliza para firmar la referencia de ensamblado. Este se utiliza cuando dos o más ensamblados con el mismo nombre corto de la carga.
    • ;componente: especifica que la asamblea se refiere a que se hace referencia desde la asamblea local.
    • /Ruta de acceso: el nombre del archivo de recursos, incluyendo su ruta relativa a la raíz de la referencia de ensamblado de la carpeta del proyecto.
Las tres barras diagonales tras application: tienen que ser reemplazados con comas:
Nota: La autoridad de los componentes de un paquete de URI es un integrado URI que apunta a un paquete y deben cumplir con la RFC 2396. Además, el carácter "/" debe ser reemplazado con el "," carácter", y caracteres reservados como "%" y "?" debe ser escapado. Ver el OPC para obtener más detalles.
Y, por supuesto, asegúrese de que configurar la acción de compilación en la imagen para Resource.



Otro ejemplo.
string packUri = "pack://application:,,,/AssemblyName;component/Images/icon.png";
_image.Source = new ImageSourceConverter().ConvertFromString(packUri) as ImageSource;



No hay comentarios: