Expression Blend4经验分享:文字公告无缝循环滚动效果
这次分享一个类似新闻公告板的无缝循环滚动效果,相信很多项目都会应用到这个效果。之前我也百度了一下,网上的一些Silverlight的文字或图片滚动效果,都是一次性滚动的,如果要做到无缝循环滚动,多数要去调用JS代码来完成,如何使用Blend和VS来完成无缝滚动效果呢?先说一下制作思路:将新闻公告文字作为数据源绑定给ListBox,再将Listbox动态添加到Scrollviewer里,在后台代码中定义计时器,循环更改Scrollviewer的垂直偏移量,达到滚动ListBox的目的。
1、 在项目的页面编辑模式中,拖入一个Scrollviewer控件,名称:sv1,宽度为Auto,高度为200(以项目需求为准),在它的属性面板里的布局内容里对垂直和水平滚动条做设置如下:
垂直滚动条一定要设置为隐藏,如果设置为Disabled,改变垂直偏移量也无法滚动其内容。
2、在sv1里放入一个StackPanel,名称:sp,宽度和高度都是Auto,再给这个容器赋予FluidMoveBehavior流体移动行为,行为的公共属性里的应用对象设置为“Self”,如下图:
这个行为可以让sp容器在Scrollviewer容器里滚动显的更平滑。
3、在页面上添加一个ListBox控件,编辑其他副本—编辑生成的项目容器—编辑副本
创建Style资源,名称:ListBoxItemStyle1,位置:应用程序
进入模板编辑模式,添加一个TextBlock,居中布局,它的Text绑定到“news”字段(后台代码将定义一个含news字段的文本数据源),如下图
<TextBlock HorizontalAlignment="Center" TextWrapping="Wrap" Text="{Binding news}" VerticalAlignment="Center" FontSize=""/>
Listbox的样式编辑完成后,可以删除页面上这个ListBox控件了,我们只需要在后台动态应用这个样式即可。
4、在页面上添加一个按钮,名称:btn1,作为启动滚动效果的执行按钮,添加btn1_Click事件。
5、使用VS编辑后台代码,代码如下:
public partial class UserControl3 : UserControl
{
//定义新闻公告集合
List<News> newlist = new List<News>();
public UserControl3()
{
// 为初始化变量所必需
InitializeComponent(); newlist.Add(new News { news = "" });
newlist.Add(new News { news = "" });
newlist.Add(new News { news = "" });
newlist.Add(new News { news = "" });
newlist.Add(new News { news = "" });
newlist.Add(new News { news = "" });
newlist.Add(new News { news = "" });
newlist.Add(new News { news = "" });
newlist.Add(new News { news = "" }); //动态添加2个ListBox到sp容器中,以超出sp容器的高度为宜
for (int i = ; i <=; i++)
{
ListBox lb = new ListBox();
lb.ItemsSource = newlist;
//应用ListBoxItemStyle1资源样式
lb.ItemContainerStyle = App.Current.Resources["ListBoxItemStyle1"] as Style;
//sp容器添加ListBox
this.sp.Children.Add(lb); }
}
//新闻公告类
public class News
{
//定义字段
public string news{ get; set; }
} private void btn1_Click(object sender, System.Windows.RoutedEventArgs e)
{
double Offset = ;//定义垂直偏移量计数器
int listboxNum = ;//定义ListBox计数器 DispatcherTimer timer = new DispatcherTimer();//定义计时器
timer.Interval = TimeSpan.FromMilliseconds();//定义时间间隔为1秒
timer.Tick += (s, ee) =>
{
sv1.ScrollToVerticalOffset(sv1.VerticalOffset + );//每秒垂直偏移40
Offset = Offset+;//计数器跟随偏移40
if (Offset> sp.ActualHeight/sp.Children.Count )//当计数器超过ListBox的高度时
{
//获取sp容器里已显示过的ListBox,并隐藏,以降低CPU
ListBox lb_Collapsed = this.sp.Children[listboxNum] as ListBox;
lb_Collapsed.Visibility = Visibility.Collapsed; //添加新的ListBox
ListBox lb = new ListBox();
lb.ItemsSource = newlist;
lb.ItemContainerStyle = App.Current.Resources["ListBoxItemStyle1"] as Style;
this.sp.Children.Add(lb); listboxNum = listboxNum++;//ListBox计数器累计
Offset= ;//重新初始化垂直偏移量计数器
}
};
timer.Start();//启动计时器 }
}
Expression Blend的经验分享会持续推出,欢迎关注我的博客!
我个人的小作品展示平台 :http://raimon.6.gwidc.com/
欢迎有志于钻研Blend的朋友加入我们的Blend美工群QQ:152049269
Expression Blend4经验分享:文字公告无缝循环滚动效果的更多相关文章
- Expression Blend4经验分享:制作一个简单的文字按钮样式
首先在Grid里放一个TextBlock,对象时间线窗口的结构树如下 右键点击grid,选择构成控件 会弹出构成控件的对话框,选择你要构成的控件类型,控件名称,控件样式存储位置 这里我们选择butto ...
- Expression Blend4经验分享:自适应布局浅析
今天分享一下Blend制作自适应分辨率布局的经验,大家先看下效果图: 这是一个标准的三分天下的布局,两侧的红色区域是背景区域,是用来干吗的呢,下面简单的分析一下,大家就明白了. 1.拿到一个项目,进行 ...
- Expression Blend4经验分享:制作一个简单的图片按钮样式
这次分享如何做一个简单的图片按钮经验 在我的个人Silverlight网页上,有个Iphone手机的效果,其中用到大量的图片按钮 http://raimon.6.gwidc.com/Iphone/de ...
- JavaScript学习笔记——简单无缝循环滚动展示图片的实现
今天做了一个简单的无缝循环滚动的实例,这种实例在网页中其实还挺常见的,下面分享一下我的学习收获. 首先,无缝滚动的第一个重点就是——动.关于怎么让页面的元素节点动起来,这就得学明白关于JavaScri ...
- 文字列表无缝向上滚动JavaScript代码
<!DOCTYPE html> <html> <head> <meta charset=utf-> <title>文字列表无缝向上滚动Jav ...
- 原生js实现文字无缝向上滚动效果
在网上查找到了一个实现文字无缝向上滚动效果的源码,结果发现运行有问题,于是就稍加改动,实现了js无缝向上滚动的效果. <script> window.onload = roll(50); ...
- vue文字间歇无缝向上滚动
公司的管理系统中有"文字间歇无缝向上滚动"的需求,现在这种需求基本在项目开发中已经消失了,没什么新颖的,但架不住公司高层喜欢这种玩意儿,所以,作为开发人员,即使你有一百个不乐意,谁 ...
- jquery 单行滚动、批量多行滚动、文字图片翻屏滚动效果代码
jquery单行滚动.批量多行滚动.文字图片翻屏滚动效果代码,需要的朋友可以参考下. 以下代码,运行后,需要刷新下,才能加载jquery,要不然看不到效果.一.单行滚动效果 <!DOCTYPE ...
- 图片循环滚动效果shader
背景无限循环滚动效果,有X和Y轴的速度控制,方便控制.见下图,操作步骤同之前的背景循环设置. shader如下: Shader "Custom/Scroll" { Properti ...
随机推荐
- sqlserver删除所有表(表结构和数据)
要删除某个数据库,或者删除数据库中的所有表(删除表结构和数据),需要先删除表间的外键约束,才能删除表.如删除数据库db_wy中的所有表: --/第1步**********删除所有表的外键约束***** ...
- C#ArrayList集合——小例题
用两种方法编写题目:输入姓名,语文分数,数学分数,英语分数到集合,求语文总分,数学平均分,英语最高分以及英语最高分是谁.法一:一个集合的做法 Console.Write("输入总人数:&qu ...
- C#语句2——循环语句(for穷举、迭代和while循环)
一.for循环拥有两类: (一).穷举: 把所有可能的情况都走一遍,使用if条件筛选出来满足条件的情况. 1.单位给发了一张150元购物卡,拿着到超市买三类洗化用品.洗发水15元,香皂2元,牙刷5元. ...
- 关于oracle数据库报12505错误的问题!
问题阐述: 导致oracle报12505错误的原因比较多,但是最可能一种原因就是客户端的监听出了问题. 解决办法: 在oracle安装目录下找到listener.ora 和 tnsnames.ora, ...
- df,du,mount
df 查看当前系统中文件系统的使用情况 $df [-aTh]缺省选项查看当前系统的所有文件系统 -a列出所有的信息 -T列出文件系统类型 -hhuman-readable,用合适的单位表示大小 $df ...
- PlaceHolder的两种实现方式
placeholder属性是HTML5 中为input添加的.在input上提供一个占位符,文字形式展示输入字段预期值的提示信息(hint),该字段会在输入为空时显示. 如 <input typ ...
- 定时器的应用---中断方式---让8个LED灯,左右各4个来回亮
定时器的应用---中断方式---让8个LED灯,左右各4个来回亮 /*************************** 中断方式 是主程序专注于其他的事情, 待定时器中断时才执行中断子程序. ** ...
- C语言链表中数组实现数据选择排序,升序、降序功能主要难点
链表排序讲解: head指针指向链表的头结点,是找到整个链表的唯一依据,如果head指针丢失,整个链表就找不到了. head存储的是第一个节点的地址,head->next存储的是第二个节点的地址 ...
- @Value取不到值引出的spring的2种配置文件applicationContext.xml和xxx-servlet.xml
项目中经常会用到配置文件,定义成properties的形式比较常见,为了方便使用一般在spring配置文件中做如下配置: <context:property-placeholder ignore ...
- IE自动跳转到标准模式
<meta http-equiv="X-UA-Compatible" content="IE=edge">