2008-10-24 20 views
13

Estoy retocando con Silverlight 2.0.Imagen de Silverlight: cargar URL dinámicamente?

Tengo algunas imágenes, que actualmente tengo una URL estática para el origen de la imagen. ¿Hay alguna forma de cargar dinámicamente la imagen desde una ruta de URL para el sitio que aloja el control?

De forma alternativa, una configuración configurada, almacenada en un solo lugar, que contiene la ruta base para la URL, de modo que cada imagen solo contenga el nombre del archivo?

Respuesta

16

En el código detrás o un convertidor de valores que puede hacer

Uri uri = new Uri("http://testsvr.com/hello.jpg"); 
    YourImage.Source = new BitmapImage(uri); 
2

SilverlightHost.Source le proporcionará la dirección URL que se utiliza para cargar el archivo XAP. Puede usar esto para luego construir una URL relativa para sus imágenes.

Así que si, por ejemplo, su XAP está alojado en http://foo.bar/ClientBin/bas.xap y sus imágenes se almacenaron en http://foo.bar/Images/, puede utilizar la Fuente para obtener el nombre y el protocolo de host para construir el nuevo URI.

16

Por lo que veo, no intenta cambiar la imagen de forma dinámica, sino determinar correctamente la ubicación de la imagen en tiempo de ejecución.

Creo que el simple prefijo de la URL relativa a la imagen con "../" debería llevarlo a la raíz de su aplicación, no necesariamente al sitio, ya que la aplicación podría no alojarse en la raíz de un sitio.

Si el archivo XAP se encuentra de la siguiente manera:

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

Y dónde tratar de vincular la siguiente imagen:

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

Apparentl y todos los URI relativos son relativos al lugar donde se encuentra el archivo XAP (la carpeta ClientBin por lo general) y Silverlight agrega el espacio de nombres actual del cliente Silverlight. Entonces, si el control de Silverlight está en el espacio de nombres Whoppa, necesitaría poner todas sus imágenes en el directorio clientbin/Whoppa /. No exactamente conveniente.

La solución es utilizar URIs absolutos como sigue:

nuevo Uri (App.Current.Host.Source, "../images/a/boo.png");

+0

Esto no funciona para mí. La única forma de cargar una imagen es especificar la URL completa, como: http: //localhost/hello.jpg. No aparece ninguna imagen si uso: hello.jpg, /hello.jpg o ../hello.jpg. Y mi archivo .xap está en la carpeta/ClientBin. –

+2

Aparentemente, todos los URI relativos son relativos a dónde se encuentra el archivo XAP (la carpeta ClientBin normalmente) y Silverlight agrega el espacio de nombres. La solución alternativa es ir absoluta de la siguiente manera: nueva Uri (App.Current.Host.Source, "../hello.jpg"); –

2

img.Source = new BitmapImage (image uri) debe funcionar.

2

img.Source = new BitmapImage(new Uri("/images/my-image.jpg", UriKind.Relative)); se resolverá correctamente en la raíz de la aplicación de Silverlight donde "../images/my-image.jpg" no lo hará.

Esto solo es cierto en el código subyacente al establecer dinámicamente la fuente de la imagen.No puede usar esta notación (el "/" para designar la raíz) en el XAML (vaya a fijarse, espero que lo arreglen)

2

El siguiente código me funcionó solo cuando la imagen se incluye en el proyecto como un archivo de recursos :

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

No puedo acceder a la URL desde las URL absolutas. Ni siquiera la URL de la granja de Flickr para las imágenes.

+0

Solo podrá hacer conexiones http a recursos en el servidor donde vive su XAP a menos que esté ejecutándose como una aplicación de confianza, ¿no? – Jeb

6
// 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)); 
+3

nice image filename insertándose allí: D – pearcewg

Cuestiones relacionadas