[Silverlight]Silverlight2中打造SplashScreen 1
何谓SplashScreen?在SL中,SplashScreen就是初始化屏幕,也就是说我们可以通过一个SplashScreen来实现自定义的Loading效果代替SL中默认的“小点点绕圈圈”。
这篇文章中我们主要实现动画部分,下一篇文章将说明如何将这次将的动画制作成SplashScreen
不说废话,先看下效果
正如你所看到的,我们这里要实现效果就是用颜色填充这个Logo(广告时间:该logo就是俺设计的4mvc小组的logo,对mvc有爱的同学欢迎访问:http://www.51mvc.com)。
ps:我这里的实现办法可能有些笨,还望高手指点。
首先我们要准备两张图片
分别命名为logo1和logo2并将其导入至工程中
然后进行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中提供实现。

作者:紫色永恒
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述