Как я могу отображать изображения из произвольной папки в Xamarin Forms в Windows 8
Это может быть мертвая лошадь, но мне нужно иметь возможность предоставить локальную папку, полную изображений, ВНЕ моего приложения Xamarin - не как ресурсы, не требующие компиляции, чтобы добавить больше изображений - и отобразить эти изображения в приложении, в объектах Image. Моя основная целевая платформа - Windows 10. Другие, которые приятно иметь, не требуются.
Образ Xamarin Forms обычно принимает либо имя файла (без пути), либо URI. Я не могу получить ни один метод, чтобы найти и отобразить изображения из локальной файловой системы. Я должен делать что-то не так.
Нерабочий образец:
Image i = new Image();
i.Source = ImageSource.FromFile(some.png); // Needs to be from folder on local disk
grid.Children.Add(i, c, r);
Большинство статей, которые я нахожу, объясняют, как связать изображения с приложением как часть источника; снова мне нужно отобразить их в приложении из папки БЕЗ связывания их с приложением. Пользователи должны иметь возможность добавлять больше изображений в папку, и они будут работать в приложении без перекомпиляции / переустановки - как галерея изображений.
РЕДАКТИРОВАТЬ: я могу успешно прочитать текстовый файл с помощью PCLStorage https://github.com/dsplaisted/pclstorage. Есть ли способ связать это с Xamarin формирует изображение?
2 ответа
Вам нужно написать класс для платформы, чтобы читать изображения и возвращать поток, который может быть использован StreamImageSource. Затем вы можете использовать DependencyService, чтобы представить это поведение вашему Forms PCL.
В качестве альтернативы, вы можете использовать PCLStorage
var f = await FileSystem.Current.LocalStorage.GetFileAsync (path);
Stream s = await f.OpenAsync (FileAccess.Read);
image.Source = ImageSource.FromStream(() => s);
По сути, вы не можете. Если вы не связываете изображения с вашим приложением, вам нужно каким-то образом передать изображения в приложение. Наиболее распространенным случаем является то, что вы размещаете эти изображения на веб-сервере, где приложение загружает изображения с этого веб-сервера.