none
Silverlight 2.0 RTW 装载UserControl 的webLoading怎么实现? RRS feed

  • 问题

  • 三个Page.xaml、Ctrl.xaml、Deepzoom.xaml

    Page.xaml中有Button1、Button2、Button...、Button...  (类似菜单导航)

            private void Button1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                Canvas_Container.Children.Clear();

                Ctrl ctrl= new Ctrl();    //动态加载的控件,其中包含很多高清图片
                Canvas_Container.Children.Add(ctrl);

             }

            private void Button2_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                Canvas_Container.Children.Clear();

                Deepzoom dp = new Deepzoom();  //动态加载的控件,其中包含很多高清图片
                Canvas_Container.Children.Add(container);
            }

    Ctrl.xaml、Deepzoom.xaml中都包含大量图片,考虑在加载这两个UserControl时加个webLoading,用来显示加载进度,不知道如何实现?请大侠帮忙!

    2008年11月2日 2:07

答案

  • 建立一个全屏的层(将其隐藏) ,再里面加入Loading动画,加载新控件前,其这个隐的层进行显示,并控制播放动画,这时这个层处于全屏状态并可以阻止用户输入,当新控件加载后在Loaded事件里停止Loading动画,并将这个层再次隐藏。程序也简单我在这就不贴源码了,没有几行。
    2008年11月2日 11:05

全部回复

  •  

    Children.Clear();

    后加

    GC.Collect();

    但是建议你如果反复使用的大量图片把他加到全局或者静态变量中去,不进行卸载.

    因为sl的内存回收机制,并不像想象中的那么彻底.总会留下一点点遗迹

    2008年11月2日 2:24
    版主
  • Uri address = new Uri(HtmlPage.Document.DocumentUri, "ClientBin/Deepzoom.xap");//Ctrl.xap
    WebClient webClient = new WebClient();

    webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
      

     void webClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
    {

    //显示webloading,加载进度

    }

     

    WebClient 实际上是个下载器,2.0以前叫做Downloader 。这只是我的下策,是不是只能通过这种方式,才能得到控件加载进度呢?如果用这种方式的话,Ctrl.xaml、Deepzoom.xaml等所有的UserControl都做成.xap,这太麻烦了。虽然2.0 RTW中多了个ProgressBar的控件,但我不知道怎么得到加载控件的进度

    2008年11月2日 5:01
  •  

    Ctrl.xaml,Deepzoom.xaml两个xaml描述文件咋包含大量图片呀?图片可以打包到.rar里面,然后统一下就行了,程序跟xaml放在主项目里就行,如果你有大量向量描述的xaml可以考虑单放出来,不过把xaml的向量描述单摘出成string更清晰而且程序比较小
    2008年11月2日 5:28
    版主
  • 楼上大哥。您的意思是不是把图片都压缩到rar包里面,然后放到xaml所在的项目下吗?这样的话,生产的.xap文件会不会大很多呢?据我了解.xap在浏览页面时是要会被下载到客户端的,这样会不会很慢呢?还有您提到的向量描述指的是什么?可以在详细点吗?

    2008年11月2日 6:10
  •  

    这几个xmal文件包含大量图片的意思是这样的:

    我的网站是做一个汽车360度旋转的效果,这是一个动画,通过鼠标的拖动来控制动画播放到相应的帧位,得到汽车旋转的效果,实际上每一帧上都放了一张汽车一个角度的高清图片

    另外一个XAML,加入了Silverlight Deepzoom技术,他的功能就是无数张高清图片的缩放,通过deepzoom composer工具把所有高清图片切割成无数张小图片存放在服务器端,通过分段下载到客户端。 

    2008年11月2日 6:22
  • 那最好不要把图片都放到silverlight的项目中,打包成.rar,用绝对路径去读,webclient下这个rar包分别读图片就行了,放在项目中,dll会很大,特大的时候会影响程序性能

     

    2008年11月2日 7:49
    版主
  • 建立一个全屏的层(将其隐藏) ,再里面加入Loading动画,加载新控件前,其这个隐的层进行显示,并控制播放动画,这时这个层处于全屏状态并可以阻止用户输入,当新控件加载后在Loaded事件里停止Loading动画,并将这个层再次隐藏。程序也简单我在这就不贴源码了,没有几行。
    2008年11月2日 11:05