上星期贴出了个Silverlight图片公告控件,当时只是初步的实现了效果。今天抽空将它功能完善了并推出正式版。
      正式版加入了切换图片动画效果,读取xml文件不再依赖WebService,数字按钮响应功能修正。这次重写了大部分代码,Silverlight的结构也做出了修改,并且对程序进行了“瘦身”,或许细心的人也发现了上次版本中,实现的功能只是很简单可是文件却有300k,经过“瘦身”后Silverlight程序只有8k了。

实现效果:效果测试页

制作所需工具

Visual Studio 2008
      Microsoft Expression Blend 2.5 March 2008 Preview

这次我就不制作视频了,Beta版的制作视频:点击进入

改用WebClient来读取Xml文件

读取xml代码
//建立读取xml文件的WebClient
            WebClient xmlClient = new WebClient();
            xmlClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(xmlClient_DownloadStringCompleted);
            xmlClient.DownloadStringAsync(new Uri(HtmlPage.Document.DocumentUri, "XML/Placard.xml"));

我们再看看Xaml结构上修改了什么。

Placard.xaml文件中Grid代码
<Grid x:Name="LayoutRoot" Background="White" Loaded="Placard_Loaded">
        <Image x:Name="image" Cursor="Hand" Width="260" Height="195" OpacityMask="#FF000000"/>
        <Canvas x:Name="temp" Margin="0,0,0,0" Width="260" Height="195"/>
        <StackPanel Height="17" x:Name="Foot" VerticalAlignment="Bottom" Orientation="Horizontal">
            <Rectangle Height="17" Width="0" x:Name="g_rect" Fill="#FF000000">
                <Rectangle.OpacityMask>
                    <LinearGradientBrush EndPoint="0.688000023365021,0.474000006914139" StartPoint="0.0970000028610229,0.526000022888184">
                        <GradientStop Color="#00000000"/>
                        <GradientStop Color="#FF000000" Offset="1"/>
                    </LinearGradientBrush>
                </Rectangle.OpacityMask>
            </Rectangle>
            <TextBlock Height="17" Width="20" Text="TextBlock" TextWrapping="Wrap" Foreground="#00000000" x:Name="mouseindex" Margin="-70,0,0,0"/>
            <TextBlock Height="17" x:Name="currentindex" Width="20" Foreground="#00000000" Text="TextBlock" TextWrapping="Wrap" Margin="-110,0,0,0"/>
        </StackPanel>
          <!--Top用于捕获鼠标点击-->
        <Rectangle HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Top" Fill="#00000000" Width="260" Height="178" x:Name="Top" Cursor="Hand" MouseEnter="Top_MouseEnter" MouseLeave="Top_MouseLeave" MouseLeftButtonUp="Top_MouseLeftButtonUp"/>
    </Grid>

加入了Rectangle (Top)作于鼠标事件获取对象,加入了一个Canvas(temp)用于实现图片切换
      现在来说明一下实现动画切换的思路,首先image作为显示图片的主体,实现动画时从后台添加一个图片进temp中,实现的动画的Storyboard都是对这个零时图片进行的,动画完毕后删除加入temp中的图片,并切换image中的图片。这样整个切换流程就完成了。

制作图片切换动画最好能使用Blend来制作这样会简单明了。这个项目中的storyboard我都是用Blend制作的

Storyboard代码
<UserControl.Resources>
        <Storyboard x:Name="ImageStoryboard1" Completed="ImageStoryboard_Completed">
            <ColorAnimationUsingKeyFrames Storyboard.TargetName="tmpimage" Storyboard.TargetProperty="(UIElement.OpacityMask).(SolidColorBrush.Color)" BeginTime="00:00:00">
                <SplineColorKeyFrame KeyTime="00:00:00" Value="#00000000"/>
                <SplineColorKeyFrame KeyTime="00:00:0.600000" Value="#FF000000"/>
            </ColorAnimationUsingKeyFrames>
        </Storyboard>
        <Storyboard x:Name="ImageStoryboard2" Completed="ImageStoryboard_Completed">
            <PointAnimationUsingKeyFrames Storyboard.TargetName="tmpimage" Storyboard.TargetProperty="(UIElement.OpacityMask).(LinearGradientBrush.StartPoint)" BeginTime="00:00:00">
                <SplinePointKeyFrame KeyTime="00:00:00" Value="0.0001,0.9999"/>
                <SplinePointKeyFrame KeyTime="00:00:00.6000000" Value="1,0.0"/>
            </PointAnimationUsingKeyFrames>
            <PointAnimationUsingKeyFrames Storyboard.TargetName="tmpimage" Storyboard.TargetProperty="(UIElement.OpacityMask).(LinearGradientBrush.EndPoint)" BeginTime="00:00:00">
                <SplinePointKeyFrame KeyTime="00:00:00" Value="0,1"/>
                <SplinePointKeyFrame KeyTime="00:00:00.6000000" Value="0,1"/>
            </PointAnimationUsingKeyFrames>
        </Storyboard>
        <Storyboard x:Name="ImageStoryboard3" Completed="ImageStoryboard_Completed">
            <PointAnimationUsingKeyFrames Storyboard.TargetName="tmpimage" Storyboard.TargetProperty="(UIElement.OpacityMask).(LinearGradientBrush.StartPoint)" BeginTime="00:00:00">
                <SplinePointKeyFrame KeyTime="00:00:00" Value="-0.389999985694885,0.0469999983906746"/>
                <SplinePointKeyFrame KeyTime="00:00:00.6000000" Value="-0.601999998092651,-0.237000003457069"/>
            </PointAnimationUsingKeyFrames>
            <PointAnimationUsingKeyFrames Storyboard.TargetName="tmpimage" Storyboard.TargetProperty="(UIElement.OpacityMask).(LinearGradientBrush.EndPoint)" BeginTime="00:00:00">
                <SplinePointKeyFrame KeyTime="00:00:00" Value="-0.382999986410141,-0.527999997138977"/>
                <SplinePointKeyFrame KeyTime="00:00:00.6000000" Value="-0.171000003814697,-0.244000002741814"/>
            </PointAnimationUsingKeyFrames>
        </Storyboard>
    </UserControl.Resources>

自己动手制作一个图片切换动画也很容易,新建一个xaml文件,在文件中加入一个Image,然后开始制作效果。效果做好后就可以把Storyboard代码抄出来复制到Placard中。某些效果不只靠Storyboard就能实现的,Image也会有部分属性作了修改,由于Placard中的切换的图片是在后台代码添加的,所以我们需要按照新xaml中的图片属性来写后台代码。

随机动画切换图片代码
//随机切换图片效果
        private void RandomImageAnimation(int nextcurrent)
        {
            //零时存放下一张图片,用于实现动画切换效果
            Image tmpImage = new Image();
            tmpImage.SetValue(Image.NameProperty, "tmpimage");
            tmpImage.Width = 260;
            tmpImage.Height = 195;
            tmpImage.Margin = new Thickness(0, 0, 0, 0);
            
            cTimer.Stop();
            tmpImage.Source = new BitmapImage(new Uri(pds[nextcurrent].imgurl, UriKind.Relative));            
            Random sbRandom = new Random();
            switch (sbRandom.Next(1, 4))
            {
                case 1 :
                    //效果1:图片透明转换
                    tmpImage.SetValue(OpacityMaskProperty, "#00000000");
                    temp.Children.Add(tmpImage);
                    ImageStoryboard1.Begin();
                    break;
                case 2:
                    //效果2:图片由左下开始往右上透明转换
                    LinearGradientBrush lgb1 = new LinearGradientBrush();
                    GradientStop gs1_1 = new GradientStop();
                    GradientStop gs1_2 = new GradientStop();
                    gs1_1.SetValue(GradientStop.ColorProperty, "#00000000");
                    gs1_1.Offset = 0;
                    gs1_2.SetValue(GradientStop.ColorProperty, "#FFFFFFFF");
                    gs1_2.Offset = 1;
                    lgb1.GradientStops.Add(gs1_1);
                    lgb1.GradientStops.Add(gs1_2);
                    tmpImage.OpacityMask = lgb1;                    
                    temp.Children.Add(tmpImage);                    
                    ImageStoryboard2.Begin();
                    break;
                case 3:
                    //效果3:图片以左上一个点为基点,透明+旋转转换
                    LinearGradientBrush lgb2 = new LinearGradientBrush();
                    GradientStop gs2_1 = new GradientStop();
                    GradientStop gs2_2 = new GradientStop();
                    gs2_1.SetValue(GradientStop.ColorProperty, "#00000000");
                    gs2_2.SetValue(GradientStop.ColorProperty, "#FFFFFFFF");
                    gs2_2.Offset = 1;
                    lgb2.GradientStops.Add(gs2_1);
                    lgb2.GradientStops.Add(gs2_2);
                    lgb2.SetValue(LinearGradientBrush.StartPointProperty, "-0.384999990463257,0.0469999983906746");
                     lgb2.SetValue(LinearGradientBrush.EndPointProperty, "-0.388000011444092,-0.527999997138977");
                    tmpImage.OpacityMask = lgb2;
                    temp.Children.Add(tmpImage);
                    ImageStoryboard3.Begin();
                    break;
            }
        }

在数字按钮变色处理上也作出了修改,图片轮显使相应的数字按钮也会变色,还有当鼠标指入Top区域时,轮显停止变换,详细的这些内容请查看源码。

源代码 :正式版源码

PS:我只制作了3种切换效果,如果大家利用这个源码做了新的切换效果希望能和我交流一下,或者跟帖贴出代码。
            大家共同进步!

转载于:https://www.cnblogs.com/JerryChin/archive/2008/04/09/1145412.html

Silverlight图片公告栏正式版相关推荐

  1. Silverlight 4简体中文正式版脱机帮助文档下载

    微软官方的帮助文档一直以来都是最好的最全的技术教程,6月17日,微软推出Silverlight 4简体中文正式版脱机帮助文档,希望能够帮助更多中文Silverlight开发人员. Microsoft ...

  2. 最新版本的Silverlight Tools For Silverlight 2 RTW正式版

    Silverlight Tools RC1 for Visual Studio 2008 SP1 http://www.microsoft.com/downloads/details.aspx?Fam ...

  3. 总结一下silverlight文章,然后死等10月10日的正式版

    这三天参加了微软关于WPF&Silverlight的培训(昨天结束),与美国微软总部过来的专家Jaime Rodriguez, Laurence Moroney,做了面对面的技术交流,感觉受益 ...

  4. VS2008正式版创建silverlight项目失败的解决办法

    安装microsoft express blend2 最新的试用版时,说请安装.net framework3.5 或更新的版本,我一想,我装了vs2008 beta2,有3.5呀, 于是我就下了个vs ...

  5. Silverlight 4正式版发布

    微软发布Silverlight 4正式版,Silverlight官方已经更新Silverlight 4开发包. Silverlight 4仅支持在Visual Studio 2010下开发,所以,首先 ...

  6. 微软Silverlight 3正式版已经出炉

    微软Silverlight 3正式版已经出炉 再过几个小时微软才会官方发布,但Silverlight 3正式版(版本号3.0.40624.0)已经新鲜出炉了.如果你感兴趣可以前往其官方网站升级安装. ...

  7. PDF 补丁丁 (修改PDF书签;拆分、合并、制作PDF;提取图片) 0.3.0.8 正式版

    PDF 补丁丁 0.3.0.8 正式版 新版本已经发布,请到博客首页下载. 软件简介 PDF补丁丁是一个用于修改PDF文件信息的工具.它具有以下功能: ■ 修改文档(带"*"号部分 ...

  8. Silverlight 3正式版新鲜出炉

    [IT168资讯]Silverlight 3正式版(版本号3.0.40624.0)已经新鲜出炉,将于今日正式发布.今日在See the light网站将举行线上发布活动,播放视频Keynote和技术演 ...

  9. 微软Silverlight 3正式版

    微软Silverlight 3正式版已经出炉,下载后, 安装比较顺利,过程如下: 1.先安装Silver Light 3 客户端http://www.microsoft.com/silverlight ...

最新文章

  1. 关于zipfile解压出现的字符编码问题
  2. 判断一个矩阵是否可对角化
  3. 【人脸对齐-Landmarks】人脸对齐算法常用评价标准
  4. Vue中使用input简易的上传图片
  5. 解决方案,org.hibernate.LazyInitializationException: could not initialize proxy - no Session
  6. word把对应图片变成嵌入的ActiveX控件。
  7. [Luogu P2801]教主的魔法
  8. oracle 卸载(手动,无universal installer)
  9. 安全合规/法案--35--《APP收集使用个人信息自评估指南(征求意见稿)》原文及解读
  10. Android Unrecognized Android Studio (or Android Support plugin for IntelliJ IDEA) version ‘202.7660.
  11. 专业学习与职业发展之我见
  12. 西电计算机学院王宇平,西安电子科技大学计算机学院硕导介绍:王宇平
  13. 【OCR 文字识别】Python中一个不错的OCR库-EasyOCR
  14. Debian 8 麦克风无声音的解决过程
  15. 获取300套PPT模板+7天WPS会员,扫码关注领取
  16. 【华人学者风采】张良培 武汉大学
  17. Win10锁屏之后设置自动关闭屏幕的时间
  18. linux开发板设置时间,开发板上修改时间方法
  19. 山东电销机器人_客服人员,你担心山东百应电销营销机器人系统抢你饭碗吗?...
  20. 状态机控制移位寄存器multisim仿真过程中出现的状态变量和状态转移条件不匹配的问题

热门文章

  1. h1到h6的字体大小(93)
  2. 学生信息管理系统(VB 干货篇三)
  3. windows常见adb调试错误
  4. 数据结构课程设计——校园导游咨询系统
  5. 在win7操作系统中的文件中搜索相关内容
  6. 历史经验之SNMP学习笔记
  7. 《小日常》APP隐私政策
  8. 非抢占的高响应比优先调度算法
  9. Latex 表格及算法排版记录
  10. 【项目精选】保险业务管理系统