Silverlight镜像:动态加载URL?

时间:2008-10-24 02:38:00

标签: silverlight silverlight-2.0

我正在修补Silverlight 2.0。

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

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

8 个答案:

答案 0 :(得分: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”);

答案 1 :(得分:15)

在后面的代码或值转换器中,您可以

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

答案 2 :(得分: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 :(得分:4)

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

答案 4 :(得分:2)

SilverlightHost.Source将为您提供用于加载XAP文件的URL。您可以使用它来构建图像的相对URL。

因此,例如,如果您的XAP托管在http://foo.bar/ClientBin/bas.xap上并且您的图像存储在http://foo.bar/Images/中,则只需使用Source来获取主机名和协议即可构建新的URI。

答案 5 :(得分:2)

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

答案 6 :(得分:2)

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

仅在动态设置图像源时的代码隐藏中才会出现这种情况。你不能在XAML中使用这种表示法(“/”来指定根目录)(go fiquire,希望他们能解决这个问题)

答案 7 :(得分:2)

以下代码仅在图像作为资源文件包含在项目中时才适用于我:

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

我无法从绝对网址访问网址。甚至不是Flickr的图像农场URL。