En código para cargar un recurso en el montaje executiong donde mi imagen Freq.png
estaba en la carpeta Icons
y se define como Resource
:
this.Icon = new BitmapImage(new Uri(@"pack://application:,,,/"
+ Assembly.GetExecutingAssembly().GetName().Name
+ ";component/"
+ "Icons/Freq.png", UriKind.Absolute));
I también hizo una función si alguien puede usarlo:
/// <summary>
/// Load a resource WPF-BitmapImage (png, bmp, ...) from embedded resource defined as 'Resource' not as 'Embedded resource'.
/// </summary>
/// <param name="pathInApplication">Path without starting slash</param>
/// <param name="assembly">Usually 'Assembly.GetExecutingAssembly()'. If not mentionned, I will use the calling assembly</param>
/// <returns></returns>
public static BitmapImage LoadBitmapFromResource(string pathInApplication, Assembly assembly = null)
{
if (assembly == null)
{
assembly = Assembly.GetCallingAssembly();
}
if (pathInApplication[0] == '/')
{
pathInApplication = pathInApplication.Substring(1);
}
return new BitmapImage(new Uri(@"pack://application:,,,/" + assembly.GetName().Name + ";component/" + pathInApplication, UriKind.Absolute));
}
Uso (supuesto se pone la función en una clase ResourceHelper):
this.Icon = ResourceHelper.LoadBitmapFromResource("Icons/Freq.png");
Nota: ver MSDN Pack URIs in WPF:
pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml
¿Sería posible hacer esto de forma dinámica? Si tengo una cantidad diferente de imágenes que me gustaría cargar en la puesta en marcha, ¿podría crear un BitmapSource por imagen y referirme a ellas de la misma manera que la anterior? –
@Becky - Sí, podría, aunque si quería referirse a ellos en Xaml, podría necesitar usar la extensión de marcado 'DynamicResource' en lugar de' StaticResource', suponiendo que conocería las claves en tiempo de compilación. En WPF puede crear diccionarios de recursos en tiempo de ejecución. De hecho, eso es lo que sucede cuando cargas un documento Xaml, es solo que no ves el equivalente de C#. –
Gracias por la respuesta :) Me referiré a ellos a través de FindResource, pero creo que esto puede ahorrar una cantidad ridícula de procesamiento en mi aplicación ahora, así que gracias :) –