Silverlight图像:如何动态加载URL?

13

我正在尝试使用Silverlight 2.0。

我有一些图片,目前它们的图像源都是静态URL。 是否有一种方法可以从托管控件的网站的URL路径动态加载图像?

或者,是否有一个配置设置,存储在单个位置中,保存URL的基本路径,以便每个图像仅保存文件名?

8个回答

16

据我所知,你并不是想动态更改图片本身,而是要在运行时正确确定图像的位置。

我认为只需在图片相对 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,如下所示:

  

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


这对我不起作用。我唯一能加载图像的方法是指定完整的URL,例如:http://localhost/hello.jpg。如果我使用:hello.jpg、/hello.jpg或../hello.jpg,则没有任何图像显示。我的.xap文件位于/ClientBin文件夹中。 - Scott Mitchell
2
显然,所有的相对URI都是相对于XAP文件所在的位置(通常是ClientBin文件夹),Silverlight会添加命名空间。解决方法是使用绝对路径,如下所示:new Uri(App.Current.Host.Source, "../hello.jpg"); - Craig Nicholson

15

在代码后台或者值转换器中,你可以这样做:

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

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
很棒的图片文件名被插入在那里 :D - pearcewg

4

2
以下代码仅在将图像作为资源文件包含在项目中时才适用:
img.Source = new BitmapImage(new Uri("/images/my-image.jpg", UriKind.Relative)); 

我无法从绝对URL访问URL。甚至无法访问Flickr的图像farm URL。


除非您正在运行受信任的应用程序,否则只能对XAP所在的服务器上的资源进行http连接,是吗? - Jeb

2

2

img.Source = new BitmapImage(new Uri("/images/my-image.jpg", UriKind.Relative));会正确地解析为Silverlight应用程序的根目录,而"../images/my-image.jpg"则不会。

只有在动态设置图像源时,这一点才是正确的。您不能在XAML中使用此符号("/"来指定根目录)(希望他们能修复这个问题)。


2

img.Source = new BitmapImage(image uri) 必须正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接