Привязка данных к изображениям XAML, Silverlight, C #, Windows Phone 7.1 - PullRequest
1 голос
/ 14 октября 2011

Я пишу приложение для Windows Phone 7 и, хотя мне кажется, что я понимаю, как привязать поля к данным, я не могу привязать изображение к элементу XAML.

ЭтоВот как определяется мой элемент изображения в моем XAML:

<image Source="{Binding ImageLocation}" > </image>

ImageLocation - это строковое свойство.По какой-то причине мое изображение отображается, если «ImageLocation» является строкой, которая указывает на изображение в Интернете (например, «http://whatever/image.jpg")», но ничего не показывает, если изображение хранится локально в изолированном хранилище.

Действительно, изображение находится в папке в изолированном хранилище под названием «Изображения». Поэтому я попытался установить для свойства ImageLocation значение «Images \ image.jpg», но это не сработало. Изображение просто не отображаетсявверх. Я также пробовал несколько вариантов, таких как "/Images/image.jpg", "http://localhost/Images/image.jpg", и все другие нечетные комбинации.

Я также пытался сделать это:

<image Source="{Binding Path=ImageLocation}"> </image>

но это тоже не сработало. Изображение просто не отображается, если оно локальное, но всегда работает, если оно находится на удаленном сайте.

Я видел различные примерыв Интернете с помощью «Конвертера» для отображения изображения. Поскольку я новичок в C # и Silverlight, я не очень понимаю, зачем мне нужен конвертер для этого. Насколько я понимаю, конвертер для изображения будетпросто ретуили строка, или фактические данные изображения, основанные на том, что потребуется элементу XAML (я могу ошибаться).Однако, поскольку я заранее знаю, что строка должна работать, зачем мне даже писать этот конвертер?

Кроме изображения, все остальные мои поля связаны правильно.

Вот кое-что омой код установки:

Я определяю элемент ListBox на моей странице XAML, которая имеет ItemTemplate и DataTemplate.Внутри этого у меня есть сетка с двумя столбцами, которые содержат изображения и текстовые поля соответственно.

Кроме этого, у меня есть класс, полученный из IList для поддержки отложенной загрузки.Этот класс имеет список «ListItems», которые представляют каждую строку списка.ListItem имеет строковые свойства, определяющие изображение и некоторый текст, связанный с ними.Как я уже упоминал, текстовые поля работают правильно, и изображение работает, только если свойство ImageLocation указывает на местоположение в Интернете, но не на местоположение в изолированном хранилище.

Я проверил с помощью инструмента Isolated Storage Explorer и убедился, что образ, который я пытаюсь загрузить, находится в изолированном хранилище, поэтому не нужно искать файл.

Спасибо за ваши идеи или комментарии.

1 Ответ

2 голосов
/ 14 октября 2011

Файлы изолированного хранилища доступны только в виде потоков. Если вы хотите хранить свои изображения там, вам нужно будет использовать конвертер на привязках. Они откроют указанный файл, загрузят поток в память и вернут источник растрового изображения. Они не просто возвращают имя файла.

Относительные пути, такие как ваши примеры, предназначены для использования с изображениями, которые хранятся либо в качестве ресурсов приложения в DLL-библиотеках Silverlight, либо для размещения ресурсов веб-сайта (в зависимости от косой черты, имени сборки и т. Д.).

В этом ответе есть конвертер, который вы можете попробовать: Обложка для Windows Phone 7 Silverlight из IsolatedStorage

...