2013-03-26 17 views
46

Tutti, ho il seguente avvio di una piccola applicazione che controlla i file .resx per la coerenza delle parentesi incorporate (in modo che gli errori di runtime delle stringhe "... {0}" non corrispondenti non succede). Ho il seguente codice XAML per il MainWindow.xaml, e il mio problema particolare si riferisce all'immagine che deve essere visualizzato sul pulsanteImmagine nel pulsante WPF non visibile in fase di esecuzione

<Window x:Class="ResxChecker.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="174.383" Width="495.869"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="350*"/> 
      <ColumnDefinition Width="Auto"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="30*"/> 
     </Grid.RowDefinitions> 
     <Label Content="Select .resx file:" HorizontalAlignment="Left" Margin="10,0,0,0" VerticalAlignment="Top" Height="24" Width="Auto" Grid.ColumnSpan="1"/> 
     <TextBox Grid.ColumnSpan="2" HorizontalAlignment="Stretch" Margin="10,0,0,0" Grid.Row="1" TextWrapping="Wrap" Text="" VerticalAlignment="Top"/> 
     <Button Grid.Column="2" HorizontalAlignment="Right" Margin="5,0,10,0" Grid.Row="1"> 
      <Image VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="16 " Width="16" Source="pack://siteoforigin:,,,/Resources/UserCost2013Open16.png"/> 
     </Button> 
    </Grid> 
</Window> 

L'immagine ha 'Build Action = Resource', 'Copia nella directory di output = Non copiare '- l'immagine viene mostrata nella finestra di progettazione ma non in fase di runtime. Ho visto le seguenti domande e leggere le relative risposte, ma nessuno risolvere il problema:

  1. WPF control images not displayed when consumed by an application

  2. image problem in wpf (image does not show up)

  3. Background Image of Button not showing in WPF

Come faccio ad avere l'immagine del pulsante per apparire in fase di runtime?

+1

provare a impostare l'azione build 'Conte nt'. Potrebbe essere utile –

+1

Provato anche quello. Ciò non aiuta neanche ... – MoonKnight

+2

Che cosa potrebbe aiutare è il controllo della console di output in Visual Studio durante il debug dell'applicazione. A volte mostra errori utili (ad es. Errori di binding, ecc.) – Daniel

risposta

56

Modificare l'azione di creazione in "Risorsa". Anche l'URL del pacchetto è sbagliato. O uso:

Source="pack://application:,,,/Resource/UserCost2013Open16.png" 

o semplicemente

Source="/Resource/UserCost2013Open16.png" 
+4

Ho appena ri-aggiunto l'immagine utilizzando il pannello delle proprietà del designer che ho fatto in primo luogo e ha fornito un URI diverso da quello che avevo ed era come quello in alto che hai mostrato - questo non ha funzionato. Ho ri-aggiunto l'immagine come una risorsa - ancora nessuna fortuna. Ho aggiunto di nuovo l'immagine _again_ - questo mi ha dato un URI come quello in basso in uno spettacolo ... Taadaa! Ha funzionato, perché questo è successo non ne ho idea, ma è bello saperlo in futuro. Grazie per il tuo tempo. – MoonKnight

+0

@ Killercam: ora ho sperimentato qualcosa di molto simile; dare un'occhiata al mio * EDIT3 * in [questa domanda] (http://stackoverflow.com/questions/21022707/how-to-set-image-resource-uri-from-code-behind/21024049) per una possibile spiegazione del perché aggiungere nuovamente può essere utile (anche se non uno per il motivo per cui ha funzionato per te solo al secondo tentativo). –

+0

'pack: // application: ,,,/...' non sembra essere piaciuto molto da .XAML in fase di esecuzione. Genera un errore - "non riconosciuto/non valido blah blah". Ho un progetto 'UIDomain' con tutte le viste, i presentatori, i modelli e le immagini. Sembra che 'Resources/*. Png' sia nella directory' views/... .../Resources/img.png' quando è più simile a '../ Resources/img.png' – IAbstract

26

Ci sono 2 soluzioni:

1: Modificare le impostazioni dell'immagine:

Build Action = Content 
Copy to output directory = Copy if newer 
Source="pack://siteoforigin:,,,/Resources/UserCost2013Open16.png" 


2 : Quando tu cantare applicazione invece di siteoforigin nel percorso di origine, si deve modi possibili:

a) Immagine sarà in una sottocartella denominata "Risorse" e file exe sarà piccolo

Source="pack://application:,,,/Resources/UserCost2013Open16.png" 
Build Action = Content 
Copy to output directory = Copy if newer 

b) l'immagine sarà incluso nel .exe e non sottocartella con imagefile esisterà

Source="pack://application:,,,/Resources/UserCost2013Open16.png" 
Build Action = Resource 
Copy to output directory = Copy if newer 
+1

Molto buono, ha funzionato anche per me (WPF VS2015 e Windows 10) –

+1

# 1 ha funzionato per me (WPF VS2015 .NET4.5) – Hoakie

+0

Soluzione 2 funziona. 'Copia nella directory di output' non è necessario nel mio caso. – Felix

6

Nel mio caso ho avuto le immagini in un progetto separato denominato Common e le immagini erano in una cartella denominata Resources in questo progetto. Nel mio altro progetto, ho aggiunto un riferimento a Common e impostare la fonte delle immagini come questa:

<Image Source="/Common;component/Resources/anImage.png"/> 

Le immagini hanno la Build Action set per Resource e Copy to Output Directory a Do not copy. Tuttavia, per qualche strana ragione, non funzionava finché non ho eliminato tutti i file di assembly nella mia soluzione e ho creato un Clean Solution e Build Solution. Non so perché, ma tutto ha iniziato a funzionare in fase di runtime una volta che ho ricostruito tutto.Non riesco ancora a capire perché funzionasse in Design Time.

+1

L'aggiunta della stringa 'component' nel percorso Source è stata fondamentale per visualizzare le mie immagini in fase di esecuzione. – Ted

1

È necessario aggiungere qualsiasi elemento all'interno di Solution Explorer di Visual Studio. Invece di copiare semplicemente l'immagine nella cartella in Esplora risorse, premere il tasto destro del mouse su qualsiasi cartella in Solution Explorer vai su Aggiungi> Elemento esistente ... e seleziona il percorso della risorsa da aggiungere.

2

Vai alla tua immagine presente nella cartella delle risorse, fai clic destro sull'immagine, vai alle proprietà. Fare clic sulla proprietà BuildAction e impostarla su Risorsa da none. Funzionerà.

6

Assumeing che avete

  • impostare il Build Action al Resource

  • set che percorso correttamente utilizzando URI-PACK-FORMAT

Nel mio caso non è stato ancora mostrato.

Clean & RebuildNON appena creato risolto per me!

+0

@walteronassis è ancora una risposta ... ergo non vale neanche un downvote. E dal momento che ho ottenuto 4 Upvotes, suppongo abbia aiutato 4 ppl e risolto il problema. –

+0

Quindi hai esattamente la stessa impostazione come nella domanda iniziale e non hai avuto bisogno di modificare l'azione di costruzione né copiare le impostazioni o il percorso di origine? – walteronassis

+0

Sì. 'BuildAction' e' UriPack' avevano ragione. L'immagine non mostrava => 'Clean & Rebuild' e funzionava. –

1

ho definito la mia immagine come prossimo:

<Image Source="/Resources/Images/icon.png"/> 

L'immagine viene visualizzata in Visual Studio designer, ma nessuna immagine viene visualizzata quando ho lanciato l'app! Mi ha fatto impazzire! Ho provato tutto Costruisci azione s con clean/build, senza fortuna.

Nel mio caso il problema è causato dal fatto che il controllo (che utilizza Image) e l'app stessa sono in progetti diversi. Risorse/Immagini La cartella si trova nel progetto Controls. Di conseguenza l'app ha tentato di trovare icon.png nella propria cartella debug, ma in realtà è nella cartella di debug dei controlli Controlli.

Così due soluzioni lavorare per me:

1) ha messo resources/images nel progetto del app (non così buono quando ci sono diversi progetti che utilizzano i controlli da Controlli progetto, ma funziona)

2) specificare il nome del progetto di controlli in modo esplicito all'interno Immagine:

<Image Source="/Controls;component/Resources/Images/icon.png"/> 
Problemi correlati