【问题标题】:Silverlight image: load URL dynamically?Silverlight 图像:动态加载 URL?
【发布时间】:2008-10-24 02:37:59
【问题描述】:

我正在修改 Silverlight 2.0。

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

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

【问题讨论】:

    标签: silverlight silverlight-2.0


    【解决方案1】:

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

    我相信简单地在图像相对 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,如下所示:

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

    【讨论】:

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

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

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

    【讨论】:

      【解决方案3】:
      // 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));  
      

      【讨论】:

      • 漂亮的图像文件名被插入到那里:D
      【解决方案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);
      

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          img.Source = new BitmapImage(image uri) 必须有效。

          【讨论】:

            【解决方案7】:

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

            这仅在动态设置图像来源时的代码隐藏中是正确的。您不能在 XAML 中使用这种表示法(“/”来指定根)(去 fiquire,希望他们能解决这个问题)

            【讨论】:

              【解决方案8】:

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

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

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

              【讨论】:

              • 除非您作为受信任的应用程序运行,否则您只能与 XAP 所在服务器上的资源建立 http 连接,不是吗?
              猜你喜欢
              • 2010-12-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-06-01
              • 1970-01-01
              • 1970-01-01
              • 2023-03-20
              相关资源
              最近更新 更多