silverlight - una - propiedad alt imagen
Imagen de Silverlight: carga URL de forma dinámica? (8)
Estoy retocando con Silverlight 2.0.
Tengo algunas imágenes, que actualmente tengo una URL estática para el origen de la imagen. ¿Hay alguna manera de cargar dinámicamente la imagen desde una ruta URL para el sitio que aloja el control?
Alternativamente, ¿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?
En el código subyacente o en un convertidor de valor puedes hacer
Uri uri = new Uri("http://testsvr.com/hello.jpg");
YourImage.Source = new BitmapImage(uri);
SilverlightHost.Source le proporcionará la URL que se utilizó para cargar el archivo XAP. Puede usar esto para luego construir una URL relativa para sus imágenes.
Entonces, por ejemplo, si su XAP está alojado en http://foo.bar/ClientBin/bas.xap y sus imágenes se almacenaron en http://foo.bar/Images/ , simplemente puede usar Source para obtener el nombre de host y protocolo para construir el nuevo URI.
img.Source = new BitmapImage (image uri) debe funcionar.
img.Source = new BitmapImage(new Uri("/images/my-image.jpg", UriKind.Relative));
se resolverá correctamente en la raíz de la aplicación Silverlight, donde "../images/my-image.jpg" no lo hará.
Esto solo es cierto en el código subyacente cuando se establece dinámicamente la fuente de la imagen. No puede usar esta notación (la "/" para designar la raíz) en el XAML (vaya a buscar, espero que lo arreglen)
Por lo que veo, no intentas 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 estar alojada en la raíz de un sitio.
Si su archivo XAP se encuentra de la siguiente manera:
Y trataste de vincular la siguiente imagen:
Aparentemente, todos los URI relativos están relacionados con el lugar donde se encuentra el archivo XAP (la carpeta ClientBin normalmente) y Silverlight agrega el espacio de nombres actual del cliente de 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 consiste en utilizar URI absolutos de la siguiente manera:
nuevo 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);
El siguiente código funcionó para mí 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 URL absolutas. Ni siquiera la URL de la granja de Flickr para las imágenes.