[Silverlight]Silverlight2中打造SplashScreen 1

简介:


何谓SplashScreen?在SL中,SplashScreen就是初始化屏幕,也就是说我们可以通过一个SplashScreen来实现自定义的Loading效果代替SL中默认的“小点点绕圈圈”。

这篇文章中我们主要实现动画部分,下一篇文章将说明如何将这次将的动画制作成SplashScreen

不说废话,先看下效果

正如你所看到的,我们这里要实现效果就是用颜色填充这个Logo(广告时间:该logo就是俺设计的4mvc小组的logo,对mvc有爱的同学欢迎访问:http://www.51mvc.com)。

ps:我这里的实现办法可能有些笨,还望高手指点。

首先我们要准备两张图片

logo1 logo2

分别命名为logo1和logo2并将其导入至工程中

image

然后进行XMAL的编写,代码如下

<UserControl x:Class="SilverlightDemo.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    >
    <Border BorderBrush="DarkRed" BorderThickness="2" Width="300" Height="300" CornerRadius="25">
        <Border.Background>
            <LinearGradientBrush EndPoint="1,0" StartPoint="1,1">
                <GradientStop Color="DarkRed" Offset="0"/>
                <GradientStop Color="Transparent" Offset="0.4"/>
            </LinearGradientBrush>
        </Border.Background>
        <Canvas x:Name="LayoutRoot">
            <Image Canvas.ZIndex="1" x:Name="imgLogo1" Canvas.Left="20" Canvas.Top="30" Source="Image/logo1.jpg">
                <Image.Clip>
                    <RectangleGeometry x:Name="rg" Rect="0,0,135,0">
                    </RectangleGeometry>
                </Image.Clip>
            </Image>
            <TextBlock Canvas.Top="80" Canvas.Left="160">
                <Run x:Name="txtPercent" Text="0"/>
                <Run Text="%"/>
            </TextBlock>
            <Image  Canvas.ZIndex="0" x:Name="imgLogo2" Canvas.Left="20" Canvas.Top="30" Source="Image/logo2.jpg">
            </Image>
            <Button Content="开 始" Height="30" Width="80" Canvas.Top="100" Canvas.Left="160" x:Name="Button" Click="Button_Click"/>
        </Canvas>
    </Border>
</UserControl>

通过XAML可以看出,我实现这个效果的方式是用有颜色的logo覆盖无颜色的logo,通过使用Image.Clip中的RectangleGeometry实现置前图片的显示大小。注意这里的图片前后放置顺序使用了Canvas.ZIndex.

然后就好办了,在后台我们可以通过System.Windows.Threading.DispatcherTimer进行进度的模拟。请看代码

        private System.Windows.Threading.DispatcherTimer timer;
        private Rect rect;
        private double i = 1;
        public Page()
        {
            InitializeComponent();
            timer = new System.Windows.Threading.DispatcherTimer();
            rect = new Rect(0, 0, 135, 0);
            timer.Interval = new TimeSpan(0, 0, 0, 0, 20);
            timer.Tick += new EventHandler(timer_Tick);
        }

        void timer_Tick(object sender, EventArgs e)
        {
            if (i < imgLogo2.ActualHeight)
            {
                rect.Height = ++i;
                rg.Rect = rect;
                imgLogo1.Clip = rg;
                txtPercent.Text = (i / imgLogo2.ActualHeight * 100).ToString();
            }
            else
            {
                timer.Stop();
                MessageBoxResult result = MessageBox.Show("是否重新开始", "载入完毕", MessageBoxButton.OKCancel);
                if (result == MessageBoxResult.OK)
                {
                    i = 0;
                    rect.Height = 0;
                    imgLogo1.Clip = rg;
                    timer.Start();
                }
            }
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            timer.Start();
        }

代码很好懂,这里就不做过多的解释了。需要说明的是,Silverlight中提供了封装好的MessageBox类以及静态的Show()方法,它的返回值是MessageBoxResult枚举,定义如下

成员名称 说明
None 当前未使用此值。
OK 用户单击了"确定"按钮。
Cancel 用户单击了"取消"按钮或按下了 ESC。
Yes 当前未使用此值。
No 当前未使用此值。

 

这是十分方便的,在以往的版本中我们只能通过System.Windows.Browser.HtmlPage.Window.Alert以及System.Windows.Browser.HtmlPage.Window.Confirm来实现。值得注意的是System.Windows.Browser.HtmlPage.Window.Prompt并未在MessageBox中提供实现。











本文转自紫色永恒51CTO博客,原文链接:http://www.cnblogs.com/024hi/archive/2008/12/05/1348738.html ,如需转载请自行联系原作者



相关文章
|
7月前
|
人工智能 自然语言处理 监控
Cooragent:清华 LeapLab 开源 AI Agent 协作框架,一句话召唤AI军团!
Cooragent 是清华大学 LeapLab 团队推出的开源 AI Agent 协作框架,支持基于简单描述快速创建 Agent 并实现多 Agent 协作,具备 Prompt-Free 设计和本地部署能力。
863 6
Cooragent:清华 LeapLab 开源 AI Agent 协作框架,一句话召唤AI军团!
|
JavaScript 前端开发 算法
Vue3与Vue2:对比分析与迁移指南
Vue3与Vue2:对比分析与迁移指南
|
自然语言处理 Rust 搜索推荐
jieba分词-Python中文分词领域的佼佼者
jieba分词-Python中文分词领域的佼佼者
168 1
|
Linux Go
Linux系统之部署Go语言开发运行环境
Linux系统之部署Go语言开发运行环境
379 1
|
JavaScript 前端开发 测试技术
Vue 3.0 响应性 基础
Vue 3.0 响应性 基础
120 0
|
缓存 NoSQL 数据库
Redis - 缓存的双写一致性
什么是数据一致性,为什么会有不一致性,需要怎么解决?
203 0
|
消息中间件 Windows
[✔️] 打开关闭应用程序的控制台
[✔️] 打开关闭应用程序的控制台
317 0
|
算法 Oracle Java
阿里巴巴面试题- - -JVM篇(二十一)
阿里巴巴面试题- - -JVM篇(二十一)
|
机器学习/深度学习 人工智能 达摩院
数智洞察 | 关于机器智能,金榕这么说
编者按: 人工智能作为经济转型升级以及占领科技创新高点的抓手,正在迎来新的一波浪潮。那么人工智能究竟在我们的生活中扮演了什么样的角色?如何助推其应用迈入新阶段?让我们一起来看一看阿里巴巴集团副总裁、达摩院机器智能实验室负责人金榕对于人工智能的看法。
225 0
|
机器学习/深度学习 域名解析 弹性计算
阿里云ECS云服务器和轻量应用服务有什么区别及选择方法
轻量应用服务器是轻量级的云服务器,不能搭建集群,适用于单机应用,比如单机网站应用。