WPF 走馬燈 文字滾動 自定義控件


    /// <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;
            }));


        }

    }

 

 

以上放到cs文件中 然后 編譯 就可以在工具箱中看到ScrollingTextControl 名稱的label控件

 

 

<Window x:Class="WpfDemoNew.Window21"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window21" Height="300" Width="300" xmlns:my="clr-namespace:WpfDemoNew.Control">
    <Grid x:Name="grid">
        <my:ScrollingTextControl Content="12345" Height="52" HorizontalAlignment="Left" Margin="10,10,0,0" x:Name="scrollingTextControl1" VerticalAlignment="Top" Width="121" Foreground="Black" />
    </Grid>
</Window>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM