2012-02-23 15 views
22

Ho diverse immagini che voglio incorporare nell'exe.Come fare riferimento a Risorse incorporate da XAML?

Quando ho impostato il Corporatura azione a Risorsa incorporata ottengo attraverso il codice di un errore che la risorsa non è disponibile e mi chiede di impostare l'azione Crea per Resource

I Ho provato diversi metodi:

<ImageSource x:Key="Image_Background">YearBook;component/Resources/Images/darkaurora.png</ImageSource> 

<ImageSource x:Key="Image_Background">Images/darkaurora.png</ImageSource> 

<ImageSource x:Key="Image_Background">pack://application:,,,/Resources/Images/darkaurora.png</ImageSource> 

Questo codice si trova in un file di risorse. Ma nessuno ha funzionato, tutti gettare questo errore:

Cannot convert the string 'pack://application:,,,/Resources/Images/darkaurora.png' into a 'System.Windows.Media.ImageSource' object. Cannot locate resource 'resources/images/darkaurora.png'. Error at object 'Image_Background' in markup file 'YearBook;component/Resources/ImageResources.xaml' Line 4 Position 6. 

e in luoghi diversi nel codice ottengo:

the file 'YearBook;component/Resources/Images/shadowdrop.png' is not a part of the project or its 'Build Action' property is not set to 'Resource' 

Quindi, che cosa sto facendo male?

risposta

17

Quando si imposta la BuildAction a Resource va come risorsa incorporata in un assieme. Oppure è possibile impostare BuildAction su Contenuto quindi verrà raggruppato nel file .xap risultante. È possibile utilizzare una qualsiasi di queste BuildAction. Impostando BuildAction a Contenuto è possibile accedere a Immagine come: "/Resources/Images/darkaurora.png" (deve iniziare con barra). E quando si utilizza la risorsa BuildAction , è possibile accedere all'immagine come "YearBook;component/Resources/Images/darkaurora.png" (nome assembly, componente/percorso relativo). Spero che questo ti sia d'aiuto.

+13

"Risorsa incorporata" e "Risorsa" sono diversi. Se osservi l'assieme generato in Reflector o in ILSpy, vedrai che vengono inclusi in modi diversi. L'autore ha chiesto come farlo con "Embedded Resource", non "Resource". – BrainSlugs83

+0

@ethicallogics ma cosa succede se è necessario associare questa risorsa tramite viewmodel? C'è qualche altra opzione, rispetto al collegamento al percorso della stringa? –

+0

Questo purtroppo non funziona per BuildAction = Risorsa – Nick

2

impostare l'azione build risorse, non Risorsa incorporata

+0

Ma voglio che sia una risorsa incorporata. ho bisogno di distribuire l'applicazione senza le immagini essere visto. –

+3

Impostandolo a una risorsa lo incorporeremo nell'assieme – devdigital

+0

lol non è il mio ... –

0

ImageSource non può essere istanziata.

public abstract class ImageSource : Animatable, 
IFormattable 

C'è quel poco abstract lì che avvitare la giornata in su. Il tuo xaml sta in realtà cercando di istanziare un'istanza di ImageSource, quindi assegna il valore all'interno dell'elemento (il tuo Uri, in questo caso) a una proprietà contrassegnata con ContentPropertyAttribute (??) usando qualsiasi convertitore che possa essere localizzato per convertire la stringa in un oggetto (di nuovo, ??).

Penso che tu voglia un BitmapSource.

<BitmapImage 
    x:Key="Image_Background" 
    UriSource="/Images/darkaurora.png" /> 
+0

Allora perché funziona quando lo imposto su Risorsa? –

+0

@ eric.itzhak: [Uh, davvero?] (Http://i.stack.imgur.com/RrKXy.png) – Will

+4

In realtà hai sbagliato questo, puoi dichiarare 'ImageSources' in XAML bene perché la classe ha un [tipo convertitore] (http://msdn.microsoft.com/en-us/library/cc645047.aspx) associato ad esso (vedere gli attributi in [i documenti] (http://msdn.microsoft.com/ it-it/library/system.windows.media.imagesource.aspx)). Non posso dirti dove è documentato, ma penso che su questo puoi fidarti di me. Si ottiene questo errore solo perché manca l'XML interno del tag. –

Problemi correlati