URI de fichier local par rapport à l'assemblée
Par exemple, j'ai la structure de projet suivante:
Root\Core\Application.exe
Root\Modules\Assembly.dll
Root\Modules\Icons\Icon.png
Mon Application.exe les charges de la Assembly.dll. L'Assembly.dll comprend un WPF UserControl avec un contrôle de l'Image. L'Icône.le png n'est pas une ressource incorporée, c'est un fichier local (Build: Contenu).
J'ai tout essayé, URI de la Source-Propriété de l'Image de Contrôle, mais il ne montre jamais l'image 🙁
<Image Source="Icons\Icon.png" />
<Image Source="pack://application:,,,/Icons\Icon.png" />
<Image Source="pack://application:,,,/Assembly;component/Icons/Icon.png" />
etc.
Comment l'URI à ressembler à?
OriginalL'auteur Sascha Lange | 2012-09-03
Vous devez vous connecter pour publier un commentaire.
Cette déclaration implique que vous ne pouvez pas consulter le Contenu des fichiers dans votre Assemblée...(donc uniquement le Contenu des fichiers qui ont été spécifiés dans votre Application peut être résolu à l'aide de l'application"://").
http://msdn.microsoft.com/en-us/library/aa970069(v=vs. 85).aspx
Vous pouvez aller quelque part avec "siteoforigin" qui fait référence à l'emplacement dans lequel vos .exe est en cours d'exécution.
ou
Bien qu'il puisse ne pas prendre le chemin d'accès relatif.
Donner un coup de cette ainsi:
Et ce:
Une astuce lors de l'expérimentation avec le Pack Uri est de construire, à l'aide de la
PackUriHelper
, de sorte que vous vous conformer à la syntaxe/sémantique.Voir certains postes liés:
Wpf Absolue vs Relative Pack Uri
http://nerddawg.blogspot.co.uk/2005/12/more-on-resource-loading-in-wpf.html
Une autre idée....
Vous pouvez définir votre propre MarkupExtension qui a aidé à construire un chemin d'accès Absolu à vos fichiers png.
Vous aurait un mondial paramètre de configuration qui s'est installé juste avant le chargement de votre fichier DLL avec LoadFrom.
Ensuite de vous faire votre XAML utiliser l'extension:
De l'utiliser comme un point de départ...dans votre cas, vous ne voulez pas utiliser l'application"://" si...vous voulez construire l'Uri comme un droit absolu "fichier" type de chemin d'URI par exemple "C:\Program Files\myapplication\Root\Modules\Icons\icône.png".
Vous pouvez obtenir votre MarkupExtension pour retourner le BitmapSource directement (ou tout simplement obtenir le retour d'une chaîne...qui, ensuite, un TypeConverter résout à un BitmapSource de toute façon).
(vous pouvez aussi faire quelque chose de similaire avec une Liaison qui a utilisé un Convertisseur pour concaténer les 2 parties de la voie, ou faire votre ViewModel faire la concaténation si vous utilisez un...la markupextension est un plus propre façon de le faire tout de même)
Cela ne fonctionne pas. J'ai essayé déjà, comme vous pouvez le voir dans mon premier post. Et bien sûr l'Icône.png existe dans le dossier de droite 😉 je pense que ça n'a rien à voir avec le chargement de l'assemblée manuellement, car j'ai créé une solution de test, et là, j'ai une Application et un ClassLibrary, et j'ai mis une référence à la ClassLibrary et ajouté directement le UserControl dans le ClassLibrary dans la MainWindow.xaml. Tout est dans le même dossier de sortie. L'URI doit être un chemin d'accès relatif à l'assemblée qui contient le contrôle UserControl et l'Icône.png (comme un fichier).
siteoforigin fonctionne seulement si tout est dans le même dossier (ou peut-être je sais que le chemin relatif à partir de la demande du dossier de modules). Btw: j'utilise de l'Assemblée.LoadFrom. L'assemblée peut être stocké partout sur l'ordinateur. C'est pourquoi je ne sais pas le chemin relatif à partir de la demande de l'assemblée au moment de la conception.
OriginalL'auteur Colin Smith