• [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中提供实现。

  • 相关阅读:
    拉伸按钮背景图片:stretchableImageWithLeftCapWidth:
    CocoaPods详解之(三)----制作篇
    CocoaPods详解之(二)----进阶篇
    CocoaPods详解之(一)----使用篇
    下载第三方类库编译报错
    XMPP之ios即时通讯客户端开发-创建工程添加XMPPFramework及其他框架(三)
    error: invalid abbreviation code [25] for DIE at 0x0000003e in Assertion failed: (*offset_ptr == end_prologue_offset), function ParsePrologue, file /S
    MAC终端:如何调整字体大小和终端样式
    MAC 安装下载好的.gz包(不像.dmg直接双击就行了)
    页面跳转
  • 原文地址:https://www.cnblogs.com/024hi/p/1348738.html
Copyright © 2020-2023  润新知