CaseStudy(showcase)数据篇-Loading的制作

做silvelight也有一段时间了,相册、游戏,刚刚完成的showcase这个小程序算是一个阶段了。这里就以showcase这个项目来做一下CaseStudy。

数据篇-Loading的制作

silverlight自带了一个loading。但是由于界面的需求可能需要定制化一下。这里我的思路是做两个sl文件用其中一个去加载另外一个。也就是说有两个xap文件一个是主要的也就是你做的silverlight程序文件,另一个小的是用来做loading的。

参考文章: 技巧:在Silverlight中如何访问外部xap文件中UserControl

 

public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
            App.Current.Host.Content.Resized += new EventHandler(Content_Resized);
            App.Current.Host.Content.FullScreenChanged += new EventHandler(Content_FullScreenChanged);

            this.Init();
        }

        private void Init()
        {
            Uri address = new Uri(HtmlPage.Document.DocumentUri, "ClientBin/showcase.xap");
            WebClient webClient = new WebClient();
            webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
            webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
            webClient.OpenReadAsync(address);

        }

        void webClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            //在这里实现你的loading动画
            double per = Convert.ToDouble(e.ProgressPercentage) / Convert.ToDouble(100);
            loadBar.Height = (App.Current.Host.Content.ActualHeight - 16) * per;
        }

        void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            Assembly assembly = LoadAssemblyFromXap(e.Result, "showcase.dll");
            UIElement element = assembly.CreateInstance("showcase.Page") as UIElement;
            this.LayoutRoot.Children.Clear();
            this.LayoutRoot.Children.Add(element);
        }

        Assembly LoadAssemblyFromXap(Stream packageStream, String assemblyName)
        {
            Stream stream = Application.GetResourceStream(
                    new StreamResourceInfo(packageStream, null),
                    new Uri("AppManifest.xaml", UriKind.Relative)).Stream;

            String appManifestString = new StreamReader(stream).ReadToEnd();

            Deployment deployment = (Deployment)XamlReader.Load(appManifestString);

            Assembly assembly = null;
            foreach (AssemblyPart assemblyPart in deployment.Parts)
            {
                if (assemblyPart.Source == assemblyName)
                {
                    String source = assemblyPart.Source;

                    StreamResourceInfo streamInfo = Application.GetResourceStream(
                        new StreamResourceInfo(packageStream,
                        "application/binary"),
                        new Uri(source, UriKind.Relative));

                    assembly = assemblyPart.Load(streamInfo.Stream);
                    break;
                }
            }
            return assembly;
        }

        void Content_FullScreenChanged(object sender, EventArgs e)
        {
            this.ResizeFrame();
        }

        void Content_Resized(object sender, EventArgs e)
        {
            this.ResizeFrame();
        }

        void ResizeFrame()
        {
            (this as UserControl).Width = App.Current.Host.Content.ActualWidth;
            (this as UserControl).Height = App.Current.Host.Content.ActualHeight;
        }

        void FullScreenMode()
        {
            App.Current.Host.Content.IsFullScreen = !App.Current.Host.Content.IsFullScreen;

        }
    }

 

作者:nasa
出处:nasa.cnblogs.com
联系:nasa_wz@hotmail.com
QQ:12446006

时间: 2024-10-13 00:29:34

CaseStudy(showcase)数据篇-Loading的制作的相关文章

CaseStudy(showcase)数据篇-加载图片

做silvelight也有一段时间了,相册.游戏,刚刚完成的showcase这个小程序算是一个阶段了.这里就以showcase这个项目来做一下CaseStudy. 数据篇-加载图片 beta1到beta2中加载图片的方法有些改变.         private void LoadImage(String MediaUrl)         {             Uri uri = new Uri(HtmlPage.Document.DocumentUri, MediaUrl);     

CaseStudy(showcase)界面篇-desing设计界面

做silvelight也有一段时间了,相册.游戏,刚刚完成的showcase这个小程序算是一个阶段了.这里就以showcase这个项目来做一下CaseStudy. 界面篇-desing设计界面 首先先说明下,我是一个程序员所以请不要在设计方面做评价.我在这里要讲的是如何使用Design这个工具来做设计. 简单的说明一下,这是一个作为案例展示的程序.功能方面设计的也比较简单.就是类别.项目和项目的简介. ok先看看最终要实现的效果. 把页面中要用到的元件拆解来一个一个制作. 最左边区域是要能够自适

CaseStudy(showcase)布局篇-列表的排放与遮罩

做silvelight也有一段时间了,相册.游戏,刚刚完成的showcase这个小程序算是一个阶段了.这里就以showcase这个项目来做一下CaseStudy. 布局篇-列表的排放与遮罩 有数据就肯定会有列表,这里就写一下我使用的心得. 做列表这里我选用的是StackPanel,它可以横向或纵向排列.同样若是纵向排列.可以设置宽度一定.高度Auto.如果需要设置间距,那就在它的子控件设置. 重点说一下对StackPanel的遮罩. 这个做遮罩首先先把StackPanel组合到一个Canvas中

CaseStudy(showcase)布局篇-如何做一个自适应窗口大小的布局

做silvelight也有一段时间了,相册.游戏,刚刚完成的showcase这个小程序算是一个阶段了.这里就以showcase这个项目来做一下CaseStudy. 布局篇-如何做一个自适应窗口大小的布局 Canvas是对其子控件绝对定位的子控件需要设置宽高.Grid而是对其子控件设置上下左右边距的子控件不一定需要设置宽高直接用Auto属性即可大小受父控件影响. 了解了特性及可以开始制作了.首先先从最外层的UserControl做起,在这里给他一个固定的宽高.这个宽高在发布的时候是可以改变的.主要

CaseStudy(showcase)界面篇-导出xaml以及放入Blend的技巧

做silvelight也有一段时间了,相册.游戏,刚刚完成的showcase这个小程序算是一个阶段了.这里就以showcase这个项目来做一下CaseStudy. 界面篇-导出xaml以及放入Blend的技巧 选中刚才制作好的元件,右键导出. 导出的设置如下图所示: 将到出的XAML复制出来.不要复制最外层的节点,复制里边的就可以了.所有的部件都是用这种方法导出. 吧代码粘贴入blend中.然后右键选择后做组合.这里有两个常用的.一个Grid一个Canvas. 每一个都有不同的用法.具体如何选择

CaseStudy(showcase)类库篇-用agTweener来实现动画效果

做silvelight也有一段时间了,相册.游戏,刚刚完成的showcase这个小程序算是一个阶段了.这里就以showcase这个项目来做一下CaseStudy. 类库篇-用agTweener来实现动画效果 项目地址:http://www.codeplex.com/agTweener 许多做flash/flex开发的人都知道在flash中有一个Tween类来帮助程序员用编程的方式来构建动画.不用每一次都在时间轴上做.silverlight也一样在sl中有一个agTweener的第三方类库. 我的

CaseStudy(showcase)布局篇-全屏效果

        public Page()         {             InitializeComponent();             App.Current.Host.Content.Resized += new EventHandler(Content_Resized);             App.Current.Host.Content.FullScreenChanged += new EventHandler(Content_FullScreenChanged

用XML数据岛结合Dom制作通讯录

一般情况下,如果要为网站提供一个通讯录程序,需要使用CGI结合后台数据库技术,这对WEB服务器的要求比较高,在很多不提供数据库功能的虚拟主机上甚至无法实现.当然,我们还可以采用TXT文本替代数据库,但TXT文本是比较难操作的,我们必须一行一行的读取判断,还要用分隔字符串实现字段分离,无法进行复杂运算. 现在,我们可以使用"可扩展的标记语言 (XML)" 来保存通讯录的数据,从而体现出XML的优点:表现数据的结构化方法,对于保存许多关系型数据结构的文件很有帮助. 一.基本原理: 在Mic

Flash片头加载loading的制作方法

核心提示:Flash片头加载loading的制作方法教程. 做一个优秀的loading是衡量一个flasher水准.甚至态度的,因为loading是唯一一个你不会多看而所有用户.客户会看的东西,所以你对loading的重视程度,甚至可以反衬你这个flasher的职业道德. 我认识不少做设计为主的朋友,很多都是自己找一个现成的loading,然后每次去套用.我个人认为这是很不好的习惯.并不是说我不提倡代码.元件的重用,而是我觉得对于loading这种东西,套多了是要出问题的.我强烈建议那些已经达到