WPF 实现简单的跑马灯
来源:互联网 发布:物流软件定制开发 编辑:程序博客网 时间:2024/05/23 00:09
本文用WPF的动画实现一个简单的跑马灯
xmal:
<Window x:Class="wpfstatusBar.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:wpfstatusBar" mc:Ignorable="d" Title="MainWindow" Height="350" Width="200"> <Grid > <Canvas Name="canva1" ClipToBounds="True" Background="Aquamarine" > <StackPanel Name="sp1" Background="Aqua" Orientation="Horizontal"> <Label Name="lab1" Content="1111111111111111111111111"/> <Label Name="lab2" Content="2222222222222222222222222"/> <Label Name="lab3" Content="3333333333333333333333333"/> <Label Name="lab4" Content="1111111111111111111111111"/> </StackPanel> </Canvas> </Grid></Window>
下面是一个最简单的例子,就让label动起来:
public MainWindow() { InitializeComponent(); storyboard_imgs = new Storyboard(); daukf_img1 = new DoubleAnimationUsingKeyFrames(); Storyboard.SetTarget(daukf_img1, sp1); Storyboard.SetTargetProperty(daukf_img1, new PropertyPath("(Canvas.Left)")); LinearDoubleKeyFrame k1_img1 = new LinearDoubleKeyFrame(0, KeyTime.FromTimeSpan(new TimeSpan(0, 0, 0))); LinearDoubleKeyFrame k2_img1 = new LinearDoubleKeyFrame(-600, KeyTime.FromTimeSpan(new TimeSpan(0, 0, 3))); daukf_img1.KeyFrames.Add(k1_img1); daukf_img1.KeyFrames.Add(k2_img1); storyboard_imgs.Children.Add(daukf_img1); storyboard_imgs.Begin(); }
然后进入正题,利用定时器实现一个简单的循环滚动3个Label的跑马灯
关键点在于第三个lab滚动的时候怎么衔接第一个lab,其实很简单,就是多new了一个和第一个lab一样的lab放在最后,
在滚动第四个lab后,利用动画开始后会瞬间将lab定位到初始位置的特性即可完成,当然如果硬要只new三个lab也行,
通过add,remove这样的操作完成,但是会比较复杂,本文应该是实现该功能最简单的算法了!xmal和上面例子一样,cs代码如下:
public partial class MainWindow : Window { DispatcherTimer _timer = new DispatcherTimer(); //UI定时器 Storyboard storyboard_imgs = null; DoubleAnimationUsingKeyFrames daukf_img1 =null; public MainWindow() { InitializeComponent(); _timer.Interval = new TimeSpan(0, 0, 0, 2); _timer.Tick += TimerElapsed; storyboard_imgs = new Storyboard(); daukf_img1 = new DoubleAnimationUsingKeyFrames(); Storyboard.SetTarget(daukf_img1, sp1); Storyboard.SetTargetProperty(daukf_img1, new PropertyPath("(Canvas.Left)")); _timer.Start(); } int index = 0; void TimerElapsed(object o,EventArgs e) { double start_left = 0; double end_left = 0; index++; if(index%3==1) { end_left = -lab1.ActualWidth; } else if(index%3==2) { start_left= -lab1.ActualWidth; end_left = -lab1.ActualWidth-lab2.ActualWidth; } else if(index%3==0) { start_left = -lab1.ActualWidth - lab2.ActualWidth; end_left = -lab1.ActualWidth - lab2.ActualWidth-lab3.ActualWidth; } daukf_img1.KeyFrames.Clear(); storyboard_imgs.Children.Clear(); LinearDoubleKeyFrame k1_img1 = new LinearDoubleKeyFrame(start_left, KeyTime.FromTimeSpan(new TimeSpan(0, 0, 0))); LinearDoubleKeyFrame k2_img1 = new LinearDoubleKeyFrame(end_left, KeyTime.FromTimeSpan(new TimeSpan(0, 0, 1))); daukf_img1.KeyFrames.Add(k1_img1); daukf_img1.KeyFrames.Add(k2_img1); storyboard_imgs.Children.Add(daukf_img1); storyboard_imgs.Begin(); } }
阅读全文
0 0
- WPF 实现简单的跑马灯
- 简单实现跑马灯
- 跑马灯简单实现
- 简单实现跑马灯效果
- 跑马灯的实现
- 跑马灯的实现
- WPF 实现跑马灯效果的Label控件,数据绑定方式实现
- TextView中实现跑马灯的最简单方法
- cocos2dx3.3 跑马灯功能的简单实现
- 用视图控件 实现简单的跑马灯
- 用代码简单的实现跑马灯效果
- 安卓简单技术-textview跑马灯的实现
- Android Studio一个简单横向跑马灯的实现
- Android 中一个简单垂直跑马灯的实现
- 简单的跑马灯效果
- 简单的跑马灯效果
- WPF使用Storyboard实现图片跑马灯效果
- TextView简单实现跑马灯效果
- 使用kaldi进行特征提取时的问题记录
- 欢迎使用CSDN-markdown编辑器
- DenseNet
- JedisPool工具类
- gdb等待进程启动后调试
- WPF 实现简单的跑马灯
- 1007. 素数对猜想 (20)
- 二维码的扩展
- caffe在编译时注意事项
- 为什么L1正则项会产生稀疏解
- Spring AOP中pointcut expression表达式解析
- Go实战--golang中获取公网ip、查看内网ip、检测ip类型、校验ip区间、ip地址string和int转换、根据ip判断地区国家运营商等
- 【莫比乌斯反演】GCD1
- codevs 1069 关押罪犯 (并查集)