2012-06-29 62 views
26

我正在使用Windows 8應用程序。我需要知道如何以編程方式設置圖像的來源。我認爲Silverlight方法可行。但是,它沒有。有人知道怎麼做這個嗎?以下將不起作用:以編程方式設置圖像來源(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; 

我得到的是說,一個例外:「給定的System.Uri不能轉換成Windows.Foundation.Uri。」

但是,我似乎無法找到Windows.Foundation.Uri類型。

回答

41

我只是想

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

和它的作品沒有問題...我使用System.Uri這裏。也許你有一個格式不正確的URI,或者你必須使用絕對URI並使用UriKind.Absolute來代替?

+1

它不是爲我工作,即時得到一個異常 –

+0

我也越來越例外嗎? – Arsal

6

好,Windows.Foundation.Uri被證明是這樣的:

.NET:這種類型的出現的System.Uri。

所以,棘手的一點不是將它自己轉換成Windows.Foundation.Uri - 它看起來像WinRT爲你做的。它看起來像是你使用的URI的問題。它在這種情況下相對於?我懷疑你真的只需要找到URI的正確格式。

17

這是我使用:

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

什麼是placeHolder.png的構建操作。我已將它設置爲「內容」,但我沒有正確加載圖像。 – Mac

+8

我收到一個錯誤,提示'RandomAccessStreamReference'不能轉換成'ImageSource'。 –

+2

圖片。Source = new BitmapImage( new Uri(「ms-appx:///Assets/placeHolder.png」,UriKind.Absolute)); – rahul

4

檢查pictureUrl因爲它是什麼導致異常。

但這應該工作以及

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

它應該有無關Windows.Foundation.Uri。因爲winrt會爲你處理它。

4

本示例使用FileOpenPicker對象來獲取存儲文件。 您可以使用任何您需要的方法以StorageFile對象的身份訪問您的文件。

Logo是圖像控件的名稱。

參考下面的代碼:

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; 
} 
相關問題