none
silverlight 中如何显示远程图片 RRS feed

  • 问题

  •  

    我想在silverlight中用Image 动态加载网上的图片,怎么添加啊,如果是本地的就可以直接使用 webclient 加载,但是远程的就不行了
    2008年8月5日 1:16

答案

全部回复

  • 目前来说,没有远程服务器的配合暂时还没有找到使用WebCLient下载远程文件的方法。
    由于SL可以和页面进行交互,可以考虑使用前端加载的方法来做。
    sl与html交互的方法参见:
    http://dotnet.aspx.cc/article/4c011275-509f-4cce-8274-258477ce5f77/read.aspx
    http://dotnet.aspx.cc/article/fb7d9cbd-e11a-40b1-9220-ade9cbbebc67/read.aspx

    因此,可以使用前端加载,示例代码如下

    Code Snippet




    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type='text/javascript'>
    var im = [
    "http://www.xinhuanet.com/olympics/aytp/xin_1920805041942187508558.jpg",
    "http://news.xinhuanet.com/photo/2008-07/26/xin_48207052620270462405583.jpg",
    "http://dotnet.aspx.cc/Images/logoSite.gif"
    ]
    var oImage = [];
    for(i= 0;i<im.length;i++)
    {
    var oImg = new Image();
    oImg.src = im[i]
    oImage[i] = oImg
    }

    function show()
    {
    document.getElementById("showImage").src = oImage[2].src
    }
    </script>
    </head>
    <body onload="show()">
    <img id="showImage" />
    </body>
    </html>



    这样,将im 或者oImage 传给sl应该就可以使用了



    2008年8月5日 2:31
    版主
  • 不好意思,我不是很明白上面说的意思。

    目前我使用的解决方式是,使用webservice 返回byte[] 数组,再将数组变化为stream 但是将byte[] 转成stream 时不行 ,报异常说是灾难性故障 不知道怎么解决

     

    2008年8月5日 2:54
  • 我的意思是说在前端加载,在服务器端加载需要先下载、再输出,相当于多加载一次,在前端直接指定地址或者前端预载,就一次。我这里只是提供了一下思路,理论上应当是可以的,晚上回去写个例子。
    2008年8月5日 3:26
    版主
  •  

    sl自己就能显示。代码如下

     

    Code Snippet

     

    <UserControl x:Class="SilverlightApplication1.Page"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Width="400" Height="300">
        <Grid x:Name="LayoutRoot" Background="White">
      <Canvas Width="800" Height="600">
       <Button Canvas.Left="10" Canvas.Top="30" Content="显示下一张" Click="Button_Click"></Button>
       <Image x:Name="img" Canvas.Left="10" Canvas.Top="60" Stretch="UniformToFill" Source="http://www.turingbook.com/Data/Book/26b8ddde-8676-4a47-98e1-89e92758857b/Cover/Cover.jpg"></Image>
      </Canvas>
     </Grid>
    </UserControl>

     

     

     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.Windows.Media.Imaging;
    namespace SilverlightApplication1
    {
        public partial class Page : UserControl
        {
            string[] ImageUrl = {
                                    "http://dotnet.aspx.cc/Book/VB20056.jpg",
                                    "http://www.1-book.cn/img/012/11125/mcover.jpg",
                                    "http://diy.travel.sohu.com/uppic/2006090421321840763.jpg",
                                    "http://i1.sinaimg.cn/dy/c/p/2008-07-27/U2107P1T1D16005701F1395DT20080727015239.jpg",
                                    "http://www.sunnylearn.cn/xywh/xshd/319/带着眼镜的美女.jpg"
                                };
            int i = 0;
            public Page()
            {
                InitializeComponent();
            }

     

            private void Button_Click(object sender, RoutedEventArgs e)
            {
                if (i >= ImageUrl.Length)
                {
                    i = 0;
                }
                img.Source = new BitmapImage(new Uri(ImageUrl[i++], UriKind.Absolute));
            }
        }
    }

     

     

     

     

    2008年8月5日 13:28
    版主
  • BitmapImage bmp = new BitmapImage();
    bmp.UriSource = new Uri("http://xxxxxx");
    this.img_Cover.Source = bmp;

    2008年8月5日 14:44
  • 你好 我也遇到同样的题 ,请问你有解决方法吗?

    急切盼望你的答复

    yymqt@126.com
    2009年3月24日 12:49