下面我来说下集合滚动.在silverlght中没有html那样简单一句话就能实现循环滚动.既:marquee.

原始的例:<marquee οnmοuseοver="stop()" οnmοuseοut="start()" scrollamount="2" scrolldelay="1"    height="22">

要循环的信息

</marquee>

我查阅了大量的文档和帮助,我确定自己写动画.在silverlight中没有像marquee那样简单的控件.只能自己拼:正面加上反面循环.

例子如下:因为这个是实际项目中的,下面的例子我简单的注释下,有写变量和注释写的不是很全.加上时间关系.如果有不明白的直接联系我,可查看相关文档.

或者直接来联系我:xuanrui.zhao@gmail.com

// 首先简单的描述下我做的这个功能:利用silverlight自带的动画标签:animation实现.在后台动态赋值两个集合,其实两个集合的值都是一样的就是

// 为了模拟marquee的循环.让其中一个集合在正面从上倒下,一个集合从下到上.实现滚动的假象.代码如下:

<Canvas x:Name="canMain" Background="Transparent" Cursor="Hand" >
                <Canvas.Clip>

<!--   定一个循环滚动的区域  -->
                    <RectangleGeometry x:Name="myRectangleGeometry" RadiusX="0" RadiusY="0" Rect="0,0, 340,50" />
                </Canvas.Clip>
                <Canvas.Triggers>
                    <EventTrigger RoutedEvent="Canvas.Loaded" >
                        <BeginStoryboard>

          <!--  Canvas.Top :说明从下到上或者从上到下滚动 , RepeatBehavior="Forever" 为循环方式-->
                            <Storyboard x:Name="animation" Storyboard.TargetProperty="(Canvas.Top)" RepeatBehavior="Forever" >
                                <DoubleAnimation x:Name="daOne" Storyboard.TargetName="spScrollTwo" From="0" To="0" Duration="0:0:10"  />
                                <DoubleAnimation x:Name="daTwo" Storyboard.TargetName="spScrollOne" From="0" To="0" Duration="0:0:10"  />
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </Canvas.Triggers>
                <StackPanel x:Name="spScrollOne" Orientation="Vertical"></StackPanel> >//要滚动的集合一
                <StackPanel x:Name="spScrollTwo" Orientation="Vertical"></StackPanel>//要滚动的集合二
            </Canvas>

// 这里我采用的是后台动态赋值:

public partial class testScroll: UserControl
    {

// 信息条数
        int icount = 0;

// 信息显示高度
        Double iRoadInforMation = 0;

public testScroll()
        {
            InitializeComponent();
            this.Loaded += new RoutedEventHandler(testScroll_Loaded);
        }

#region 页面初始化方法
        /// <summary>
        /// 页面初始化方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void testScroll_Loaded(object sender, RoutedEventArgs e)
        {
            //动态获取数据

getDataInfor();
        }
        #endregion

#region 获得信息
        /// <summary>
        /// 获得信息
        /// </summary>
        private void getDataInfor()
        {
                ......  ......... // 连接数据库

//  返回成功信息
                if (r.IsSucceed)
                {
                    //  定义实体类的集合
                     List<R_Infor>  _Data_InforList = r.Body.FromJsonString<List<R_Infor>>();

//  判断返回查询结果
                    if (null != _Data_InforList && 0 < _Data_InforList .Count)
                    {
                        //  根据查询信息给页面赋值
                        foreach (var _Infor in_Data_InforList )
                        {

          
                            double _fontsize = 15;
                            ++icount;

// 定义页面滚动显示信息容器
                            var tbInforOne = new TextBlock();
                            // 设定显示信息的样式信息
                            tbInforOne .Text = icount + ". " +  _Infor .nayiyaou(); //描述内容
                            tbInforOne .Tag =Infor .ID();//内容ID
                            tbInforOne .FontSize = _fontsize;
                            tbInforOne .LineHeight = _fontsize;
                            tbInforOne .TextWrapping = TextWrapping.Wrap; //自动换行
                            tbInforOne .Margin = new Thickness(3, 4, 3, 3); //位置
                            tbInforOne .Width = (double)325; //显示宽度
                             spScrollOne.Children.Add(tbTraInforOne); //显示添加上前台控件
                            iRoadInforMation += (tbInforOne .ActualHeight + 7); //获得实际显示高度

// 定义页面滚动显示信息容器
                            var tbInforTwo = new TextBlock();

tbInforTwo .Text = icount + ". " +  _Infor .nayiyaou(); //描述内容
                            tbInforTwo .Tag =Infor .ID();//内容ID
                            tbInforTwo .FontSize = _fontsize;
                            tbInforTwo .LineHeight = _fontsize;
                            tbInforTwo .TextWrapping = TextWrapping.Wrap; //自动换行
                            tbInforOne .Margin = new Thickness(3, 4, 3, 3); //位置
                            tbInforTwo .Width = (double)325; //显示宽度
                               spScrollTwo.Children.Add(tbTraInforTwo);

}
                        setScrolltt();
                    }
                }
            };
            _Do.Post();
        }
        #endregion

#region 设置滚动信息
        /// <summary>
        /// 设置滚动信息
        /// </summary>
        private void setScrolltt()
        {
            iRoadInforMation = iRoadInforMation + 10;
            myRectangleGeometry.Rect = new Rect(0, 0, 340, iRoadInforMation);
            // 控制滚动信息速度
            int _marqueeTimeInSeconds = Convert.ToInt32(icount * 1.5);
            spScrollOne.Height = iRoadInforMation;
            spScrollTwo.Height = iRoadInforMation;
            daOne.To = -iRoadInforMation;
            daOne.Duration = new Duration(TimeSpan.FromSeconds(_marqueeTimeInSeconds));
            daTwo.From = iRoadInforMation;
            daTwo.Duration = new Duration(TimeSpan.FromSeconds(_marqueeTimeInSeconds));
        }
        #endregion

//这个功能困扰了我一天.希望有很多和我一样需要这个功能的朋友和大家分享下.

转载于:https://www.cnblogs.com/northeastTycoon/archive/2011/11/21/2256746.html

因为这两天比较忙,所以没有及时把要发表的东西写来.废话少说:我前面把两个简单的滚动说了下.接下来介绍第三种集合循环滚动....相关推荐

  1. 【C语言】-关于strlen的介绍以及三种模拟实现的方法

    作者:低调 作者宣言:写好每一篇博客 文章目录 前言 一.strlen函数的使用 二.strlen函数的模拟实现 2.1创建临时变量法 2.2递归法 2.3指针法 总结 前言 今天我们来讲解一下str ...

  2. PL/SQL三种集合类型的比较

    PL/SQL三种集合类型的比较<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...

  3. asp.net session 介绍一三种Session存储方式

    asp.net session 介绍一三种Session存储方式 www.firnow.com 时间:2009-03-04 作者:匿名 编辑:sky 点击: 1478 [评论] 对于asp.net的程 ...

  4. Linux下查看磁盘挂载的三种方法

    Linux下查看磁盘挂载的三种方法 2009-06-05 23:17 好久没有更新日志了,呵呵.不是没有要写的东东.实在抽不出时间来写,要准备公司的考试呢,C++考试.已经有七个月没有写C++代码了, ...

  5. 2023-02-11:给你两个整数 m 和 n 。构造一个 m x n 的网格,其中每个单元格最开始是白色, 请你用 红、绿、蓝 三种颜色为每个单元格涂色。所有单元格都需要被涂色, 涂色方案需要满足:

    2023-02-11:给你两个整数 m 和 n .构造一个 m x n 的网格,其中每个单元格最开始是白色, 请你用 红.绿.蓝 三种颜色为每个单元格涂色.所有单元格都需要被涂色, 涂色方案需要满足: ...

  6. Java 三种集合的遍历方式

    List集合 四种:普通for循环.增强for循环(foreach).迭代器(iterator).forEach package demo05;import java.util.ArrayList; ...

  7. for循环java_java的这三种for循环有什么区别?

    展开全部 J2SE 1.5提供了另一种形式的for循环.借助这种形式的for循环,可以用更简单地方式来62616964757a686964616fe59b9ee7ad9431333332633034遍 ...

  8. 二维数组的foreach遍历和三种集合的遍历

    package com.skiff.www.base.grammar;import java.util.ArrayList; import java.util.Iterator; import jav ...

  9. [pascal]对“求1-100之间的所有素数”的三种不同循环结构算法的分析

    在做第四章(循环结构程序设计)的作业时,有一道"求1-100之间的所有素数"的题目,有意思的是最后出现了三种不同的写法,这三种写法的基本思想都差不多但其核心算法不同,做过求素数算法 ...

最新文章

  1. angular过滤字符_如何使用Angular和Azure计算机视觉创建光学字符读取器
  2. linux 指定库名 登录mysql_linux下对应mysql数据库的常用操作
  3. Java Swing Button控件点击事件的几种写法
  4. windows10设置开机自启动
  5. 密钥方式登录linux,Linux的密钥对的方式登录方式
  6. api地理编码_通过地理编码API使您的数据更有意义
  7. 十大经典排序算法(下)
  8. 大学物理实验电学基本参数的测量实验报告_大学物理电学实验报告
  9. windows7上启动jmeter报错,寻求解决办法?
  10. 机器学习算法总结之XGBoost(下) 实战与调参
  11. Web 端 js 导出csv文件(使用a标签)
  12. php数组去重复数据的小例子
  13. v-show在elementui中表格组件失效问题
  14. android垂直排列元素_元素的视图属性之client
  15. C/C++ 进程间通信 管道
  16. JavaScript 函数基础
  17. extjs 表格数据重新加载_将【金数据】实时获取到Excel的小技能
  18. vivo X7(全网通)线刷救砖教程
  19. 东南计算机专硕学硕区别,学硕VS专硕,你该如何选择?
  20. 身份证有效验证方法,

热门文章

  1. kali查看python版本-kali中python版本的切换方法
  2. python电脑配置要求-1.安装python3.5及电脑环境变量的配置
  3. java好还是python好-学python好还是java好
  4. python学精通要多久-学习Python零基础需要学多久?
  5. python大神-Python代码怎么写,听听顶尖Python大神的建议
  6. python流程控制语句-【Python学习之三】流程控制语句
  7. stm32跑python-简易数据采集分析流程.stm32+python
  8. python能写软件吗-python代码能做成软件吗
  9. python3下载教程-Python3 教程
  10. c#和mysql之间的类型_【SqlServer数据类型、C#数据类型、SqlDbType】对应关系及转换...