Domanda

Il mio montaggio include un'immagine con BuildAction == Resource. Voglio ottenere un BitmapImage da questa risorsa incorporata.

Posso caricare un BitmapImage da file in questo modo:

var bitmap = new BitmapImage(new Uri(path));

Ma come creo un URI che farà riferimento a un'immagine risorsa incorporata?

Quando provo e creare un ' imballare URI ' (per esempio pack://application:,,,/MyImage.png o pack://application:,,,/MyAssembly;component/MyImage.png), viene generata un'eccezione:

System.UriFormatException "URI non valido: Un porto è stato previsto perché di lì è due punti ( ':'). Presente ma la porta non poteva essere analizzato"

Ho trovato la correzione, alla UriFormatException in questo post del blog

Tuttavia, con quello correzione applicata, ho ancora delle eccezioni che tentano di caricare un BitmapImage da un pacchetto di URI.

Quando si utilizza il formato pack://application:,,,/Image.png, ho un NullReferenceException, e quando si utilizza il formato di pack://application:,,,/AssemblyName;component/Image.png, ho un NotSupportedException "Il prefisso Uri non viene riconosciuto".


Riepilogo Il mio problema era che stavo cercando di usare un 'pacco URI' in un processo prima di qualsiasi controllo WPF / finestra / etc era stato istanziato, in modo che il sistema di 'pacchetto' URI non ero ancora iscritto (altra WPF richiesto 'roba' NON deve anche essere troppo, perché la registrazione manualmente lo schema di pacchetto non si risolve il problema). La soluzione era quella di aspettare fino a dopo il mio un'istanza WPF UserControl di utilizzare URI del pacchetto.

È stato utile?

Soluzione

Questa pagina MSDN ha tutte le informazioni che si potrebbe desiderare di sapere sugli URI di risorse in WPF (spesso chiamato URI del pacchetto). Si sta andando a voler utilizzare relativa URI più spesso, probabilmente, in modo da vedere Tabella 4 , che dovrebbe essere di particolare utilità.

Se si desidera una panoramica più breve di risorse (pack) URI, vedere questo post del blog . Esso dimostra che la sintassi è davvero relativamente semplice:

pack://application:,,,/ResourceFile.xaml

pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml

Tuttavia, ci sono un paio di stranezze a lavorare fuori (nella mia esperienza), così spesso trovare la risorsa corretta URI richiede un po 'di sperimentazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top