Ответ 1
В коде позади или конвертер значения вы можете сделать
Uri uri = new Uri("http://testsvr.com/hello.jpg");
YourImage.Source = new BitmapImage(uri);
Я занимаюсь Silverlight 2.0.
У меня есть некоторые изображения, которые у меня есть статический URL для источника изображения. Есть ли способ динамически загружать изображение из пути URL-адреса для сайта, на котором размещен элемент управления?
В качестве альтернативы, параметр конфигурации, хранящийся в одном месте, который содержит базовый путь для URL-адреса, чтобы каждое изображение содержало только имя файла?
В коде позади или конвертер значения вы можете сделать
Uri uri = new Uri("http://testsvr.com/hello.jpg");
YourImage.Source = new BitmapImage(uri);
Из того, что я собираю, вы не пытаетесь изменить изображение сам по себе динамически, а скорее правильно определить местоположение изображения во время выполнения.
Я считаю, что просто префикс относительного URL-адреса изображения с "../" должен привести вас к корню вашего приложения, а не обязательно к сайту, поскольку приложение не может быть размещено в корне сайта.
Если ваш файл XAP расположен следующим образом:
И вы, где пытаетесь связать следующее изображение:
Очевидно, что все относительные URI относятся к тому, где находится файл XAP (обычно папка ClientBin), а Silverlight добавляет текущее пространство имен клиента Silverlight. Поэтому, если вы используете элемент управления Silverlight в пространстве имен Whoppa, вам нужно будет поместить все ваши изображения в каталог clientbin/Whoppa/. Не совсем удобно.
Обходной путь заключается в использовании абсолютных URI следующим образом:
новый Uri (App.Current.Host.Source, "../images/a/boo.png" );
// create a new image
Image image = new Image();
// better to keep this in a global config singleton
string hostName = Application.Current.Host.Source.Host;
if (Application.Current.Host.Source.Port != 80)
hostName += ":" + Application.Current.Host.Source.Port;
// set the image source
image.Source = new BitmapImage(new Uri("http://" + hostName + "/cute_kitten112.jpg", UriKind.Absolute));
http://www.silverlightexamples.net/post/How-to-Get-Files-From-Resources-in-Silverlight-20.aspx
using System.Windows.Resources; // StreamResourceInfo
using System.Windows.Media.Imaging; // BitmapImage
....
StreamResourceInfo sr = Application.GetResourceStream(new Uri("SilverlightApplication1;component/MyImage.png", UriKind.Relative));
BitmapImage bmp = new BitmapImage();
bmp.SetSource(sr.Stream);
SilverlightHost.Source предоставит вам URL-адрес, который использовался для загрузки файла XAP. Вы можете использовать это, чтобы затем создать относительный URL для ваших изображений.
Итак, если, например, ваш XAP размещен на http://foo.bar/ClientBin/bas.xap, и ваши изображения были сохранены в http://foo.bar/Images/ вы можете просто использовать источник, чтобы захватить имя хоста и протокол для создания нового URI.
img.Source = новый BitmapImage (изображение uri) должен работать.
img.Source = new BitmapImage(new Uri("/images/my-image.jpg", UriKind.Relative));
будет корректно разрешаться в корневом приложении Silverlight, где "../images/my-image.jpg" не будет.
Это верно только для кода, когда динамически устанавливается источник изображения. Вы не можете использовать это обозначение ( "/" для обозначения корня) в XAML (go fiquire, надеюсь, что они исправят это)
Следующий код работал у меня только тогда, когда изображение включено в проект в качестве файла ресурсов:
img.Source = new BitmapImage(new Uri("/images/my-image.jpg", UriKind.Relative));
Я не могу получить доступ к URL из абсолютных URL-адресов. Даже URL-адрес фермы Flickr для изображений.