2008-10-24 81 views
13

我正在修补Silverlight 2.0。Silverlight图像:动态加载URL?

我有一些图像,我目前有一个图像源的静态URL。 有没有办法从托管控件的网站的URL路径动态加载图片?

或者,一个存储在一个地方的配置设置,保存URL的基本路径,以便每个图像只保存文件名?

回答

16

在后面的代码或值转换器,你可以做

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

从我收集的内容来看,您并不是试图动态地改变图像本身,而是在运行时正确地确定图像的位置。

我相信只是用“../”前缀图片相对URL应该让你到你的应用程序的根,不一定是该网站,因为应用程序可能不会被托管在网站的根目录。

如果您的XAP文件位于如下:

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

而且你在哪里试图链接下面的图片:

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

Apparentl y所有相对URI都与XAP文件所在的位置(通常为ClientBin文件夹)相关,Silverlight附加当前Silverlight客户端名称空间。因此,如果您的Silverlight控件位于名称空间Whoppa中,则需要将所有图像放在clientbin/Whoppa /目录中。不完全方便。

的解决方法是使用绝对URI如下:

新URI(App.Current.Host.Source “../images/a/boo.png”);

+0

这并不为我工作。加载图像的唯一方法是指定完整的URL,例如:http://localhost/hello.jpg。如果使用:hello.jpg,/ hello.jpg或../hello.jpg,则不会显示图片。我的.xap文件位于/ ClientBin文件夹中。 – 2010-09-21 19:03:15

+2

显然,所有相对URI都与XAP文件所在的位置(ClientBin文件夹通常)以及Silverlight追加名称空间有关。解决方法是绝对如下:new Uri(App.Current.Host.Source,“../hello.jpg”); – 2010-09-30 14:21:18

2

img.Source = new BitmapImage(image uri)must work。

2

img.Source = new BitmapImage(new Uri("/images/my-image.jpg", UriKind.Relative));将正确解析为Silverlight应用程序的根,其中“../images/my-image.jpg”不会。

这只有在动态设置图像源时,在代码隐藏方面才是正确的。你不能在XAML中使用这个符号(“/”来指定根目录)(去fiquire,希望他们修复这个)

2

只有当图像作为资源文件包含在项目中时,下面的代码才适用于我:

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

我无法从绝对URL访问URL。甚至没有Flickr的图片的农场网址。

+0

除非您作为受信任的应用程序运行,否则您只能将XAP连接到XAP所在服务器上的资源,否? – Jeb 2011-03-15 19:49:28

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));