【发布时间】:2008-10-24 02:37:59
【问题描述】:
我正在修改 Silverlight 2.0。
我有一些图像,我目前有一个用于图像源的静态 URL。 有没有办法从托管控件的网站的 URL 路径动态加载图像?
或者,存储在一个位置的配置设置,它保存 URL 的基本路径,以便每个图像只保存文件名?
【问题讨论】:
标签: silverlight silverlight-2.0
我正在修改 Silverlight 2.0。
我有一些图像,我目前有一个用于图像源的静态 URL。 有没有办法从托管控件的网站的 URL 路径动态加载图像?
或者,存储在一个位置的配置设置,它保存 URL 的基本路径,以便每个图像只保存文件名?
【问题讨论】:
标签: silverlight silverlight-2.0
据我所知,您并不是在尝试动态更改图像本身,而是在运行时正确确定图像的位置。
我相信简单地在图像相对 URL 前加上“../”应该可以让您到达应用程序的根目录,而不一定是站点,因为应用程序可能未托管在站点的根目录中。
如果您的 XAP 文件位于以下位置:
你在哪里尝试链接以下图片:
显然,所有相对 URI 都相对于 XAP 文件所在的位置(通常是 ClientBin 文件夹),并且 Silverlight 会附加当前的 Silverlight 客户端命名空间。因此,如果您的 Silverlight 控件位于命名空间 Whoppa 中,则需要将所有图像放在 clientbin/Whoppa/ 目录中。不太方便。
解决方法是使用绝对 URI,如下所示:
新的 Uri(App.Current.Host.Source, "../images/a/boo.png");
【讨论】:
在后面的代码或值转换器中你可以做
Uri uri = new Uri("http://testsvr.com/hello.jpg");
YourImage.Source = new BitmapImage(uri);
【讨论】:
// 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);
【讨论】:
SilverlightHost.Source 将为您提供用于加载 XAP 文件的 URL。您可以使用它为您的图像构建一个相对 URL。
因此,例如,如果您的 XAP 托管在 http://foo.bar/ClientBin/bas.xap 并且您的图像存储在 http://foo.bar/Images/ 中,您可以简单地使用 Source 获取主机名和协议来构造新的 URI。
【讨论】:
img.Source = new BitmapImage(image uri) 必须有效。
【讨论】:
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 的图片农场 URL。
【讨论】: