silverlight版的图片轮换广告

今天下午模仿公司的Flash版图片广告做了一个silverlight版的图片轮换广告,10秒轮换一次

xaml代码:

xaml
 1<UserControl
 2    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4    x:Class="Ad.Page"
 5    >
 6    <UserControl.Resources>
 7        <Storyboard x:Name="sb_Big">
 8            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="imgBig" Storyboard.TargetProperty="(UIElement.Opacity)">
 9                <EasingDoubleKeyFrame KeyTime="00:00:00" Value="0.1"/>
10                <EasingDoubleKeyFrame KeyTime="00:00:01" Value="1"/>
11            </DoubleAnimationUsingKeyFrames>
12        </Storyboard>
13    </UserControl.Resources>
14    
15    <Canvas Background="#efefef" Height="190" Width="270">
16        <StackPanel Height="170" x:Name="pnl1" Width="270" Orientation="Horizontal" >
17            <Image Height="150" Name="imgBig" Stretch="Fill" Width="200" Margin="10" Source="/Ad;component/img/001.jpg" Cursor="Hand" >
18                <Image.Effect>
19                    <DropShadowEffect/>
20                </Image.Effect>
21            </Image>
22            <StackPanel Height="170" x:Name="pnl2" Width="40" Orientation="Vertical" Margin="0,0,10,0">
23                <Image Height="10" Name="imgUp" Stretch="Fill" Width="22" Source="/Ad;component/img/up.png" MouseLeftButtonDown="up" Cursor="Hand"/>
24                <Image Height="30" Name="img1" Stretch="Fill" Width="40" Source="/Ad;component/img/001.jpg" MouseLeftButtonDown="ImgClick" Cursor="Hand" />
25                <Image Height="30" Name="img2" Stretch="Fill" Width="40" Margin="0,10,0,0" Source="/Ad;component/img/002.jpg" MouseLeftButtonDown="ImgClick" Cursor="Hand">
26
27                </Image>
28                <Image Height="30" Name="img3" Stretch="Fill" Width="40" Margin="0,10,0,0" Source="/Ad;component/img/003.jpg" MouseLeftButtonDown="ImgClick" Cursor="Hand"/>
29                <Image Height="30" Name="img4" Stretch="Fill" Width="40" Margin="0,10,0,0" Source="/Ad;component/img/004.jpg" MouseLeftButtonDown="ImgClick" Cursor="Hand"/>
30                <Image Height="10" Name="imgDown" Stretch="Fill" Width="22" Source="/Ad;component/img/down.png"  MouseLeftButtonDown="down" Cursor="Hand"/>
31            </StackPanel>
32        </StackPanel>
33        <TextBlock Name="txtImg" Canvas.Top="170" Canvas.Left="10" Width="200" Text="就绪" HorizontalAlignment="Center" IsHitTestVisible="False" TextAlignment="Center"></TextBlock>
34    </Canvas>
35</UserControl>

Xaml.cs代码:

Xaml.Cs
  1using System;
  2using System.Collections.Generic;
  3using System.Json;
  4using System.Windows.Controls;
  5using System.Windows.Input;
  6using System.Windows.Media.Effects;
  7using System.Windows.Media.Imaging;
  8using System.Windows.Threading;
  9
 10
 11namespace Ad
 12{
 13    public partial class Page : UserControl
 14    {
 15        /**//// <summary>
 16        /// Json数据源
 17        /// </summary>
 18        string imgData = "[{src:'/Ad;component/img/001.jpg',name:'图片1'},{src:'/Ad;component/img/002.jpg',name:'图片2'},{src:'/Ad;component/img/003.jpg',name:'图片3'},{src:'/Ad;component/img/004.jpg',name:'图片4'},{src:'/Ad;component/img/005.jpg',name:'图片5'},{src:'/Ad;component/img/006.jpg',name:'图片6'},{src:'/Ad;component/img/007.jpg',name:'图片7'}]";
 19
 20        int currentIndex = 0;//当前imgData的索引
 21        int currentImgIndex = 0;//当前第几张小图为阴影区
 22        int _Max = 4;//右侧显示几张小图
 23
 24        List<ImageItem> listSrc = new List<ImageItem>();
 25
 26        private DispatcherTimer _timer;
 27
 28        public Page()
 29        {
 30            // 需要初始化变量
 31            InitializeComponent();
 32
 33            将Json转化为强类型的List#region 将Json转化为强类型的List<>
 34            JsonValue jv = JsonArray.Parse(imgData);
 35            for (int i = 0; i < jv.Count; i++)
 36            {
 37                listSrc.Add(new ImageItem() { src = jv[i]["src"].ToString().Replace("\\/", "/").Replace("\"", ""), name = jv[i]["name"].ToString().Replace("\\/", "/").Replace("\"", "") });
 38            }            
 39            #endregion
 40
 41            currentIndex = 0;
 42            currentImgIndex = 0;
 43            LoadImage();
 44
 45            启动定时器#region 启动定时器
 46            _timer = new DispatcherTimer();
 47            _timer.Interval = new TimeSpan(0, 0, 10);
 48            _timer.Tick += new EventHandler(_timer_Tick);
 49            _timer.Start();
 50#endregion
 51        }
 52
 53        void _timer_Tick(object sender, EventArgs e)
 54        {
 55            down(sender,null);
 56        }
 57
 58        
 59        /**//// <summary>
 60        /// 加载图片
 61        /// </summary>       
 62        private void LoadImage()
 63        {            
 64            int _start = currentIndex % listSrc.Count;         
 65
 66            for (int i = 0; i < _Max; i++)
 67            {
 68                if (_start >= listSrc.Count)
 69                {
 70                    _start = _start % listSrc.Count;
 71                }
 72                Image img = this.pnl2.FindName("img" + (i + 1).ToString()) as Image;
 73                img.Source = new BitmapImage(new Uri(listSrc[_start].src, UriKind.Relative));
 74
 75                if (i == currentImgIndex)
 76                {
 77                    img.Effect = new DropShadowEffect();
 78                    imgBig.Source = img.Source;
 79                    sb_Big.Begin();
 80                    txtImg.Text = listSrc[_start].name + " - yjmyzz.cnblogs.com";
 81                }
 82                else 
 83                {
 84                    img.Effect = null;
 85                }
 86                
 87                _start++;
 88            }           
 89        }
 90
 91        /**//// <summary>
 92        /// 点击向上翻时的逻辑处理 
 93        /// </summary>
 94        /// <param name="sender"></param>
 95        /// <param name="e"></param>
 96        private void up(object sender, MouseButtonEventArgs e)
 97        {
 98            currentIndex--;
 99            if (currentIndex <= 0) 
100            {
101                currentIndex = listSrc.Count;
102            }
103            LoadImage();
104        }
105
106        /**//// <summary>
107        /// 点击向下按钮时的逻辑处理
108        /// </summary>
109        /// <param name="sender"></param>
110        /// <param name="e"></param>
111        private void down(object sender, MouseButtonEventArgs e)
112        {
113            currentIndex++;
114            if (currentIndex >= listSrc.Count) 
115            {
116                currentIndex = 0;
117            }
118            LoadImage();
119        }
120        
121        /**//// <summary>
122        /// 单击右侧小图时,同时步更换大图
123        /// </summary>
124        /// <param name="sender"></param>
125        /// <param name="e"></param>
126        private void ImgClick(object sender, MouseButtonEventArgs e)
127        {
128            Image imgSmall = sender as Image;                 
129
130            imgBig.Source = imgSmall.Source;
131            sb_Big.Begin();
132
133            for (int i = 1; i <= 4; i++)
134            {
135                Image img = this.pnl2.FindName("img" + i.ToString()) as Image;
136                if (img == imgSmall)
137                {
138                    img.Effect = new DropShadowEffect();
139                    currentImgIndex = i-1;//重新保存新的小图阴影索引
140                }
141                else
142                {
143                    img.Effect = null;
144                }
145            }
146            
147            //确定新的currentIndex
148            for (int i = 0; i < listSrc.Count; i++)
149            {
150                if ((imgSmall.Source as BitmapImage).UriSource == new Uri(listSrc[i].src, UriKind.Relative))
151                {
152                    currentIndex = i;
153                    break;
154                }
155            }
156            txtImg.Text = listSrc[currentIndex].name + " - yjmyzz.cnblogs.com"; ;
157        }
158
159        /**//// <summary>
160        /// 自定义类
161        /// </summary>
162        public class ImageItem
163        {
164            public string src { set; get; }
165            public string name { set; get; }
166        }
167
168        private void imgDown_MouseEnter(object sender, MouseEventArgs e)
169        {
170            this._timer.Stop();
171        }
172
173        private void imgDown_MouseLeave(object sender, MouseEventArgs e)
174        {
175            this._timer.Start();
176        }
177
178
179    }
180}

源代码下载:http://files.cnblogs.com/yjmyzz/ImageAd_src.rar

时间: 2024-11-08 19:11:31

silverlight版的图片轮换广告的相关文章

Silverlight之ListBox/Style学习笔记--ListBox版的图片轮换广告

ListBox是一个很有用的控件,其功能直逼Asp.Net中的Repeater,它能实现自定义数据项模板,纵向/横向排列Item(如果扩展一下实现自行折行,几乎就是SL版的Repeater了--实际上WrapPanel已经实现了,不过没有默认集成在SL3中).  这里推荐一个老外的文章 http://blogs.msdn.com/delay/archive/2008/03/05/lb-sv-faq-examples-notes-tips-and-more-for-silverlight-2-be

用javascript实现的仿Flash广告图片轮换效果_javascript技巧

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

js 广告图片轮换代码

js 广告图片轮换代码 <script language="javascript" type="text/javascript">  var imgWidth=232;              //图片宽  var imgHeight=150;             //图片高  var TimeOut=5000;              //每张图切换时间 (单位毫秒);  var imgUrl=new Array();  var adNum=0

轮换广告

广告 .adrotator(轮换广告) 用法: <asp:adrotator id="标识" advertisementfile="设置的xml文件" borderwidth="边框" runat=server /> 设置的xml文件内容: <Advertisements> <Ad> <ImageUrl>广告图片的网址</ImageUrl> <NavigateUrl>图片导向

javascript+xml实现简单图片轮换(只支持IE)_javascript技巧

最近无聊,看着许多网站都有广告自动轮换,自己试着写了一个图片轮换,代码和功能都很简单,只支持IE的,FF的还要加些东东. xml文件:test.xml 复制代码 代码如下: <?xml version="1.0" encoding="gb2312"?> <ad> <neteasy path="image/64_jpg.jpg">http://www.163.com</neteasy> <sin

高分求淘宝商品列表页鼠标放上弹出多个图片轮换显示的代码

问题描述 有哪个高手有淘宝商品列表页中,鼠标放在图片上,弹出几个大图轮番展示的代码!高分求,也可出一些费用!急用!QQ290235568 解决方案 解决方案二:JS你可以扒他们的页面解决方案三:拔下来找不到图片路径,有很多多余代码我想要一个干净没有多余代码的,还是谢谢楼上解决方案四:淘宝应该是通过AJAX读取出来的图片!!你还是自己扒他们的吧!解决方案五:额...楼上大哥能帮我扒一下吗...解决方案六:没人吗???解决方案七:什么功能在哪发个URL给我看看那解决方案八:用firebug分析一下!

JQuery分屏指示器图片轮换效果实例

  本文实例讲述了JQuery分屏指示器图片轮换效果实现方法.分享给大家供大家参考.具体分析如下: 在Web App大行其道的今天,分屏指示器用得非常广泛,从Android.到腾讯的Web OS等等.分屏指示器给人很好的用户体验,下面就实现一个分屏指示器,用于实现图片的简单轮换效果,仅抛砖引玉- 代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

有道词典电脑版如何图片取词翻译

  有道词典电脑版怎么图片取词翻译?经常浏览外语资料的朋友都知道,每天都能遇到大量陌生的词汇和短语,而且是还是存在于图片之中.在词典里重新输入查询,非常浪费时间.可喜的是,有道词典作为一款强大的翻译工具,已经具备取词翻译的功能,只要稍加设置就可直接在图片上取词翻译了.下面,安下小编带来详细的设置方法,希望对你有帮助! 有道词典电脑版图片取词翻译的方法 1.首先下载一个有道词典程序,然后进行安装,接着双击快捷图标,打开程序.需要说明的是,目前图片划词功能只支持英语文字. 2.先认识一下界面.上面一

封装了一个js图片轮换效果的函数_javascript技巧

其中如果有问题,有更好的意见或者建议都可在最后留言,都将对您感激不尽. 具体的代码如下: 复制代码 代码如下: <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" > <title>图片轮换效果</title> <style type="t