Dans le code pour charger une ressource dans l'ensemble de executiong où mon image Freq.png
était dans le dossier Icons
et défini comme Resource
:
this.Icon = new BitmapImage(new Uri(@"pack://application:,,,/"
+ Assembly.GetExecutingAssembly().GetName().Name
+ ";component/"
+ "Icons/Freq.png", UriKind.Absolute));
I a également fait une fonction si quelqu'un peut l'utiliser:
/// <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));
}
Utilisation (hypothèse que vous mettez la fonction dans une classe ResourceHelper):
this.Icon = ResourceHelper.LoadBitmapFromResource("Icons/Freq.png");
Remarque: voir MSDN Pack URIs in WPF:
pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml
Serait-il possible de le faire dynamiquement? Si j'ai un nombre différent d'images que je voudrais charger au démarrage, pourrais-je créer un BitmapSource par image et me référer à eux de la même manière que ci-dessus? –
@Becky - Oui, bien que si vous vouliez vous y référer dans Xaml, vous pourriez avoir besoin d'utiliser l'extension de balisage 'DynamicResource' au lieu de' StaticResource', en supposant que vous connaissiez les clés au moment de la compilation. Dans WPF, vous pouvez créer des dictionnaires de ressources au moment de l'exécution. En fait, c'est ce qui arrive quand vous chargez un document Xaml, c'est juste que vous ne voyez pas le C# équivalent. –
Merci pour la réponse :) Je vais me référer à eux via FindResource, mais je pense que cela peut sauver une quantité ridicule de traitement dans mon application maintenant donc merci :) –