Программно установите источник изображения (XAML)
Я работаю над Windows 8. Мне нужно знать, как программно установить источник изображения. Я предположил, что подход Silverlight будет работать. Однако это не так. Кто-нибудь знает, как это сделать? Следующие действия не будут выполняться:
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.
Ответы
Ответ 1
Я просто попробовал
Image.Source = new BitmapImage(
new Uri("http://yourdomain.com/image.jpg", UriKind.Absolute));
И он работает без проблем... Я использую System.Uri
здесь. Может быть, у вас неправильный URI или вам нужно использовать абсолютный URI и вместо этого использовать UriKind.Absolute
?
Ответ 2
Это то, что я использую:
string url = "ms-appx:///Assets/placeHolder.png";
image.Source = RandomAccessStreamReference.CreateFromUri(new Uri(url));
Ответ 3
Хорошо, Windows.Foundation.Uri
документируется следующим образом:
.NET: этот тип появляется как System.Uri.
Итак, сложный бит не превращает его в Windows.Foundation.Uri
самостоятельно - похоже, что WinRT делает это для вас. Похоже, проблема связана с используемым URI. Что это относительно этого? Я подозреваю, что вам просто нужно найти нужный формат для URI.
Ответ 4
проверьте ваш pictureUrl, поскольку это привело к исключению.
но это также должно работать
img.Source = new BitmapImage(new Uri(pictureUrl, UriKind.Absolute));
он не должен иметь ничего общего с Windows.Foundation.Uri. поскольку winrt будет обрабатывать его для вас.
Ответ 5
В этом примере для получения файла хранилища используется объект FileOpenPicker.
Вы можете использовать любой метод, необходимый для доступа к вашему файлу в качестве объекта StorageFile.
Логотип - это имя элемента управления изображением.
Ссылка на следующий код:
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;
}
}
Ответ 6
Попробуйте этот формат:
ms-appx:/Images/800x600/BackgroundTile.bmp
Данный System.Uri не может быть преобразован в Windows.Foundation.Uri
Ответ 7
<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;
}