2012-06-29 12 views
26

Sto lavorando a un'applicazione Windows 8. Devo sapere come impostare a livello di codice la fonte di un'immagine. Ho pensato che l'approccio di Silverlight avrebbe funzionato. Tuttavia, non è così. Qualcuno sa come si fa questo? Quanto segue non funziona:Impostazione predefinita della sorgente di un'immagine (XAML)

string pictureUrl = GetImageUrl(); 
Image image = new Image(); 
image.Source = new Windows.UI.Xaml.Media.Imaging.BitmapImage(new Uri(pictureUrl, UriKind.Relative)); 
image.Stretch = Stretch.None; 
image.HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Left; 
image.VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Center; 

ottengo un'eccezione che dice: "Il dato System.Uri non può essere convertito in un Windows.Foundation.Uri"

Tuttavia, non riesco a trovare il tipo Windows.Foundation.Uri.

risposta

41

Ho appena provato

Image.Source = new BitmapImage(
    new Uri("http://yourdomain.com/image.jpg", UriKind.Absolute)); 

e funziona senza problemi ... Sto usando System.Uri qui. Forse hai un URI errato o devi usare un URI assoluto e usare invece UriKind.Absolute?

+1

non il suo lavoro per me, nel mese di ottenere un'eccezione –

+0

me anche ottenere un'eccezione? – Arsal

6

Beh, Windows.Foundation.Uri è documentato in questo modo:

.NET: Questo tipo appare come System.Uri.

Quindi il trucco non è convertirlo in un Windows.Foundation.Uri da soli: sembra che WinRT lo faccia per te. Sembra che il problema sia con l'URI che stai utilizzando. Che cosa è relativo a in questo caso? Sospetto che tu abbia davvero bisogno di trovare il formato giusto per l'URI.

17

Questo è quello che io uso:

string url = "ms-appx:///Assets/placeHolder.png"; 
image.Source = RandomAccessStreamReference.CreateFromUri(new Uri(url)); 
+0

Che cos'è l'azione di compilazione per placeHolder.png. L'ho impostato su "Contenuti" e non riesco a caricare correttamente l'immagine. – Mac

+8

Viene visualizzato un errore per il fatto che 'RandomAccessStreamReference' non può essere convertito in' ImageSource'. –

+2

Immagine.Source = new BitmapImage ( new Uri ("ms-appx: ///Assets/placeHolder.png", UriKind.Absolute)); – rahul

4

controllare il vostro pictureUrl dal momento che era quello che ha provocato l'eccezione.

ma questo dovrebbe funzionare così

img.Source = new BitmapImage(new Uri(pictureUrl, UriKind.Absolute)); 

dovrebbe avere nulla a che fare con Windows.Foundation.Uri. dal momento che winrt lo gestirà per te.

4

Questo esempio utilizza un oggetto FileOpenPicker per ottenere il file di archiviazione. È possibile utilizzare qualsiasi metodo necessario per accedere al file come oggetto StorageFile.

Logo è il nome del controllo immagine.

riferimento il seguente codice:

var fileOpenPicker = new FileOpenPicker(); 
    fileOpenPicker.ViewMode = PickerViewMode.Thumbnail; 
    fileOpenPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; 
    fileOpenPicker.FileTypeFilter.Add(".png"); 
    fileOpenPicker.FileTypeFilter.Add(".jpg"); 
    fileOpenPicker.FileTypeFilter.Add(".jpeg"); 
    fileOpenPicker.FileTypeFilter.Add(".bmp"); 

    var storageFile = await fileOpenPicker.PickSingleFileAsync(); 

    if (storageFile != null) 
    { 
     // Ensure the stream is disposed once the image is loaded 
     using (IRandomAccessStream fileStream = await storageFile.OpenAsync(Windows.Storage.FileAccessMode.Read)) 
     { 
      // Set the image source to the selected bitmap 
      BitmapImage bitmapImage = new BitmapImage(); 

      await bitmapImage.SetSourceAsync(fileStream); 
      Logo.Source = bitmapImage; 
     } 
    } 
0
<Image Name="Img" Stretch="UniformToFill" /> 

var file = await KnownFolders.PicturesLibrary.GetFileAsync("2.jpg"); 
using(var fileStream = (await file.OpenAsync(Windows.Storage.FileAccessMode.Read))){ 
    var bitImg= new BitmapImage(); 
    bitImg.SetSource(fileStream); 
    Img.Source = bitImg; 
} 
Problemi correlati