我正在修补Silverlight 2.0。Silverlight图像:动态加载URL?
我有一些图像,我目前有一个图像源的静态URL。 有没有办法从托管控件的网站的URL路径动态加载图片?
或者,一个存储在一个地方的配置设置,保存URL的基本路径,以便每个图像只保存文件名?
我正在修补Silverlight 2.0。Silverlight图像:动态加载URL?
我有一些图像,我目前有一个图像源的静态URL。 有没有办法从托管控件的网站的URL路径动态加载图片?
或者,一个存储在一个地方的配置设置,保存URL的基本路径,以便每个图像只保存文件名?
在后面的代码或值转换器,你可以做
Uri uri = new Uri("http://testsvr.com/hello.jpg");
YourImage.Source = new BitmapImage(uri);
SilverlightHost.Source将提供您这是用来加载XAP文件的URL。您可以使用它来为图像构建一个相对URL。
因此,例如,如果您的XAP托管在http://foo.bar/ClientBin/bas.xap上,并且您的图像存储在http://foo.bar/Images/中,则可以简单地使用源来获取主机名和协议来构造新的URI。
从我收集的内容来看,您并不是试图动态地改变图像本身,而是在运行时正确地确定图像的位置。
我相信只是用“../”前缀图片相对URL应该让你到你的应用程序的根,不一定是该网站,因为应用程序可能不会被托管在网站的根目录。
如果您的XAP文件位于如下:
而且你在哪里试图链接下面的图片:
Apparentl y所有相对URI都与XAP文件所在的位置(通常为ClientBin文件夹)相关,Silverlight附加当前Silverlight客户端名称空间。因此,如果您的Silverlight控件位于名称空间Whoppa中,则需要将所有图像放在clientbin/Whoppa /目录中。不完全方便。
的解决方法是使用绝对URI如下:
新URI(App.Current.Host.Source “../images/a/boo.png”);
img.Source = new BitmapImage(image uri)must work。
img.Source = new BitmapImage(new Uri("/images/my-image.jpg", UriKind.Relative));
将正确解析为Silverlight应用程序的根,其中“../images/my-image.jpg”不会。
这只有在动态设置图像源时,在代码隐藏方面才是正确的。你不能在XAML中使用这个符号(“/”来指定根目录)(去fiquire,希望他们修复这个)
只有当图像作为资源文件包含在项目中时,下面的代码才适用于我:
img.Source = new BitmapImage(new Uri("/images/my-image.jpg", UriKind.Relative));
我无法从绝对URL访问URL。甚至没有Flickr的图片的农场网址。
除非您作为受信任的应用程序运行,否则您只能将XAP连接到XAP所在服务器上的资源,否? – Jeb 2011-03-15 19:49:28
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);
// 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));
这并不为我工作。加载图像的唯一方法是指定完整的URL,例如:http://localhost/hello.jpg。如果使用:hello.jpg,/ hello.jpg或../hello.jpg,则不会显示图片。我的.xap文件位于/ ClientBin文件夹中。 – 2010-09-21 19:03:15
显然,所有相对URI都与XAP文件所在的位置(ClientBin文件夹通常)以及Silverlight追加名称空间有关。解决方法是绝对如下:new Uri(App.Current.Host.Source,“../hello.jpg”); – 2010-09-30 14:21:18