Изображение Silverlight: загружать URL динамически? - PullRequest
13 голосов
/ 24 октября 2008

Я работаю с Silverlight 2.0.

У меня есть несколько изображений, для которых у меня есть статический URL для источника изображения. Есть ли способ динамически загрузить изображение из URL-адреса для сайта, на котором размещен элемент управления?

В качестве альтернативы, параметр конфигурации, хранящийся в одном месте, который содержит базовый путь для URL, так что каждое изображение содержит только имя файла?

Ответы [ 8 ]

16 голосов
/ 25 октября 2008

Из того, что я понял, вы не пытаетесь динамически изменять само изображение, а скорее правильно определяете местоположение изображения во время выполнения.

Я считаю, что простое добавление префикса относительного URL изображения к "../" должно привести вас к корню вашего приложения, а не обязательно к сайту, поскольку приложение может не размещаться в корне сайта.

Если ваш файл XAP расположен следующим образом:

http://somesite.foo/app1/somethingelse/clientbin/MyFoo.xap

А вы где пытаетесь связать следующее изображение:

http://somesite.foo/app1/somethingelse/images/a/boo.png

Очевидно, что все относительные URI относительно того, где находится файл XAP (обычно папка ClientBin), и Silverlight добавляет текущее пространство имен клиента Silverlight. Поэтому, если вы управляете Silverlight в пространстве имен Whoppa, вам нужно будет поместить все ваши изображения в каталог clientbin / Whoppa /. Не совсем удобно.

Обходной путь должен использовать абсолютные URI следующим образом:

новый Uri (App.Current.Host.Source, "../images/a/boo.png");

15 голосов
/ 24 октября 2008

В коде или конвертере значений вы можете сделать

  Uri uri = new Uri("http://testsvr.com/hello.jpg");
  YourImage.Source = new BitmapImage(uri);
6 голосов
/ 04 октября 2010
// 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));  
4 голосов
/ 13 мая 2010

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);
2 голосов
/ 15 июля 2009

Приведенный ниже код работал для меня, только когда изображение включено в проект в виде файла ресурса:

img.Source = new BitmapImage(new Uri("/images/my-image.jpg", UriKind.Relative)); 

Я не могу получить доступ к URL из абсолютных URL. Даже URL-адрес фермы Flickr для изображений.

2 голосов
/ 09 апреля 2009

img.Source = new BitmapImage(new Uri("/images/my-image.jpg", UriKind.Relative)); будет правильно преобразован в корень приложения Silverlight, где "../images/my-image.jpg" не будет.

Это верно только для кода при динамической настройке источника изображения. Вы не можете использовать эту нотацию («/» для обозначения корня) в XAML (иди вон, надеюсь, они это исправят)

2 голосов
/ 18 марта 2009

img.Source = новый BitmapImage (изображение URI) должен работать.

2 голосов
/ 24 октября 2008

SilverlightHost.Source предоставит вам URL-адрес, который использовался для загрузки файла XAP. Вы можете использовать это, чтобы затем создать относительный URL для ваших изображений.

Таким образом, если, например, ваш XAP размещен на http://foo.bar/ClientBin/bas.xap, а ваши изображения хранятся в http://foo.bar/Images/, вы можете просто использовать источник для получения имени хоста и протокола для создания нового URI.

...