【WPF】走马灯Label设计

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
 
using System.Text;
using System.Timers;
using System.Windows;
 
using System.Windows.Automation.Peers;
using System.Windows.Controls;
using System.Windows.Markup;

namespace FPEngine.APP
{
 
        /// <summary>
        /// Label走马灯自定义控件
        /// </summary>
        [ToolboxBitmap(typeof(Label))] //设置工具箱中显示的图标
        public class ScrollingTextControl : Label
    {
            /// <summary>
            /// 定时器
            /// </summary>
            Timer MarqueeTimer = new Timer();
            /// <summary>
            /// 滚动文字源
            /// </summary>
            String _TextSource = "滚动文字源";
            /// <summary>
            /// 输出文本
            /// </summary>
            String _OutText = string.Empty;
            /// <summary>
            /// 过度文本存储
            /// </summary>
            string _TempString = string.Empty;
            /// <summary>
            /// 文字的滚动速度
            /// </summary>
            double _RunSpeed = 1000;

            DateTime _SignTime;
            bool _IfFirst = true;

            /// <summary>
            /// 滚动一循环字幕停留的秒数,单位为毫秒,默认值停留3秒
            /// </summary>
            int _StopSecond = 3000;

            /// <summary>
            /// 滚动一循环字幕停留的秒数,单位为毫秒,默认值停留3秒
            /// </summary>
            public int StopSecond
            {
                get { return _StopSecond; }
                set
                {
                    _StopSecond = value;
                }
            }

            /// <summary>
            /// 滚动的速度
            /// </summary>
            [Description("文字滚动的速度")] //显示在属性设计视图中的描述
            public double RunSpeed
            {
                get { return _RunSpeed; }
                set
                {
                    _RunSpeed = value;
                    MarqueeTimer.Interval = _RunSpeed;
                }
            }

            /// <summary>
            /// 滚动文字源
            /// </summary>
            [Description("文字滚动的Text")]
            public string TextSource
            {
                get { return _TextSource; }
                set
                {
                    _TextSource = value;
                    _TempString = _TextSource + "   ";
                    _OutText = _TempString;
                }
            }

            private string SetContent
            {
                get { return Content.ToString(); }
                set
                {
                    Content = value;
                }
            }

            /// <summary>
            /// 构造函数
            /// </summary>
            public ScrollingTextControl()
            {
                MarqueeTimer.Interval = _RunSpeed;//文字移动的速度
                MarqueeTimer.Enabled = true;      //开启定时触发事件
                MarqueeTimer.Elapsed += new ElapsedEventHandler(MarqueeTimer_Elapsed);//绑定定时事件
                this.Loaded += new RoutedEventHandler(ScrollingTextControl_Loaded);//绑定控件Loaded事件
            }


            void ScrollingTextControl_Loaded(object sender, RoutedEventArgs e)
            {
                _TextSource = SetContent;
                _TempString = _TextSource + "   ";
                _OutText = _TempString;
                _SignTime = DateTime.Now;
            }


            void MarqueeTimer_Elapsed(object sender, ElapsedEventArgs e)
            {
                if (string.IsNullOrEmpty(_OutText)) return;

                if (_OutText.Substring(1) + _OutText[0] == _TempString)
                {
                    if (_IfFirst)
                    {
                        _SignTime = DateTime.Now;
                    }

                    if ((DateTime.Now - _SignTime).TotalMilliseconds > _StopSecond)
                    {
                        _IfFirst = true; ;
                    }
                    else
                    {
                        _IfFirst = false;
                        return;
                    }
                }

                _OutText = _OutText.Substring(1) + _OutText[0];


                Dispatcher.BeginInvoke(new Action(() =>
                {
                    SetContent = _OutText;
                }));


            }

        }
 
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF(Windows Presentation Foundation)是一种面向Windows应用程序的用户界面框架,它提供了丰富的图形、视觉和多媒体效果。在WPF中实现滚动图片走马灯效果有以下几个步骤: 1. 首先,我们需要创建一个WPF应用程序,可以使用Visual Studio创建一个新的WPF项目。 2. 在XAML文件中,我们可以使用StackPanel或者WrapPanel等布局容器来容纳图片元素并实现横向排列。我们可以使用Image控件来添加需要滚动显示的图片。 3. 接下来,我们需要为图片设置滚动动画效果。可以使用WPF的动画系统来实现。比如,我们可以使用DoubleAnimation来改变图片的Margin属性,模拟图片的平移动画效果。 4. 在代码中,我们可以使用Storyboard来定义动画效果,并将动画应用于Image控件。我们可以设置动画重复播放,使得图片形成一个无限滚动的效果。 5. 为了实现无缝滚动效果,我们可以在动画结束时将图片重新放置到起始位置,形成一个循环滚动的效果。可以使用动画的Completed事件来监听动画的完成。在动画完成时,我们可以根据需要重新设置图片的位置。 6. 最后,我们可以通过控制动画的开始和停止来控制滚动图片走马灯的播放。可以使用按钮或者定时器来触发动画的开始和停止。 通过以上几个步骤,我们可以实现一个基本的WPF滚动图片走马灯效果。可以根据需要调整图片滚动的速度、方向以及其他动画效果,以满足具体的设计要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值