WPF上下滚动字幕

2021-06-09 23:11

阅读:727

标签:art   none   sch   ble   size   creat   www   column   ret   

原文:WPF上下滚动字幕

XAML代码:

技术图片技术图片
local:WorkSpaceContent x:Class="SunCreate.CombatPlatform.Client.NoticeMarquee"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:SunCreate.CombatPlatform.Client;assembly=SunCreate.CombatPlatform.Client"
             mc:Ignorable="d" 
             d:DesignHeight="35" d:DesignWidth="300" Loaded="WorkSpaceContent_Loaded" MouseEnter="WorkSpaceContent_MouseEnter" MouseLeave="WorkSpaceContent_MouseLeave">
    local:WorkSpaceContent.Resources>
        ControlTemplate x:Key="btnTemplate" TargetType="Button">
            TextBlock Name="txt" Margin="5 0 5 0" Text="{TemplateBinding Content}" FontSize="12" Cursor="Hand" ToolTip="{TemplateBinding ToolTip}" Foreground="#fff" VerticalAlignment="Center">TextBlock>
            ControlTemplate.Triggers>
                Trigger Property="IsMouseOver" Value="true">
                    Setter TargetName="txt" Property="Foreground" Value="#ff5e5e">Setter>
                Trigger>
            ControlTemplate.Triggers>
        ControlTemplate>
        Storyboard x:Key="storyboard">
            DoubleAnimation  Duration="0:0:1" To="25" Storyboard.TargetName="stackPanel" Storyboard.TargetProperty="RenderTransform.Y"/>
        Storyboard>
    local:WorkSpaceContent.Resources>
    Grid Background="#00a6da">
        Grid.ColumnDefinitions>
            ColumnDefinition Width="60">ColumnDefinition>
            ColumnDefinition>ColumnDefinition>
        Grid.ColumnDefinitions>
        TextBlock Margin="15 0 5 0" Text="公告:" FontSize="12"  Foreground="#ffff33" VerticalAlignment="Center">TextBlock>
        ScrollViewer Grid.Column="1" Name="scrollViewer" HorizontalScrollBarVisibility="Hidden"
                      HorizontalContentAlignment="Stretch"
                      VerticalScrollBarVisibility="Hidden"
                       VerticalContentAlignment="Stretch" Height="25">
            Border Height="25" >
                StackPanel x:Name="stackPanel" Margin="0 -25 0 0" >
                    StackPanel.RenderTransform>
                        TranslateTransform />
                    StackPanel.RenderTransform>
                    Button Name="btn1" Height="25" Click="btn_Click" Template="{StaticResource btnTemplate}">Button>
                    Button Name="btn2" Height="25" Click="btn_Click" Template="{StaticResource btnTemplate}">Button>
                    Button Name="btn3" Height="25" Click="btn_Click" Template="{StaticResource btnTemplate}">Button>
                StackPanel>
            Border>
        ScrollViewer>
    Grid>
local:WorkSpaceContent>
View Code

后台代码:

技术图片技术图片
using SunCreate.CombatPlatform.Domain;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Timers;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace SunCreate.CombatPlatform.Client
{
    /// 
    /// 公告滚动显示
    /// 
    public partial class NoticeMarquee : WorkSpaceContent
    {
        private System.Timers.Timer _timer;
        private List _data;
        private int _index;
        private Storyboard _storyboard;

        public NoticeMarquee()
        {
            InitializeComponent();
        }

        private void WorkSpaceContent_Loaded(object sender, RoutedEventArgs e)
        {
            if (_timer == null)
            {
                _storyboard = (Storyboard)this.FindResource("storyboard");

                System.Threading.Tasks.Task.Factory.StartNew(() =>
                {
                    while (true)
                    {
                        int total = 0;
                        _data = HI.Get().GetListPage(null, DateTime.MinValue, DateTime.Now, 1, 3, ref total).ToList();
                        _data.Reverse();
                        _index = _data.Count - 1;
                        Dispatcher.BeginInvoke(new Action(() =>
                        {
                            stackPanel.RenderTransform = new TranslateTransform(0, 25);
                        }));
                        ShowData();
                        Thread.Sleep(60 * 1000);
                    }
                });

                _timer = new System.Timers.Timer();
                _timer.Interval = 5000;
                _timer.Elapsed += Action;
                _timer.Start();
            }
        }

        private void Action(object sender, ElapsedEventArgs e)
        {
            Dispatcher.BeginInvoke(new Action(() =>
            {
                stackPanel.RenderTransform = new TranslateTransform(0, 0);
                _storyboard.Begin();
            }));

            _index--;
            if (_index 0)
            {
                _index = _data.Count - 1;
            }

            ShowData();
        }

        private void ShowData()
        {
            Dispatcher.BeginInvoke(new Action(() =>
            {
                TES_NOTICE data1 = GetData(_index, 0);
                TES_NOTICE data2 = GetData(_index, 1);
                TES_NOTICE data3 = GetData(_index, 2);

                if (data1 != null)
                {
                    btn1.Content = data1.NOTICE_CONTENT.Trim().Replace("\r\n", string.Empty);
                    btn1.CommandParameter = data1.ID;
                    btn1.ToolTip = data1.NOTICE_CONTENT;
                }

                if (data2 != null)
                {
                    btn2.Content = data2.NOTICE_CONTENT.Trim().Replace("\r\n", string.Empty);
                    btn2.CommandParameter = data2.ID;
                    btn2.ToolTip = data2.NOTICE_CONTENT;
                }

                if (data3 != null)
                {
                    btn3.Content = data3.NOTICE_CONTENT.Trim().Replace("\r\n", string.Empty);
                    btn3.CommandParameter = data3.ID;
                    btn3.ToolTip = data3.NOTICE_CONTENT;
                }
            }));
        }

        private TES_NOTICE GetData(int index, int n)
        {
            if (_data != null)
            {
                int i = index + n;
                if (i > _data.Count - 1)
                {
                    i = i % _data.Count;
                }
                return _data[i];
            }
            return null;
        }

        private void WorkSpaceContent_MouseEnter(object sender, MouseEventArgs e)
        {
            _timer.Stop();
        }

        private void WorkSpaceContent_MouseLeave(object sender, MouseEventArgs e)
        {
            _timer.Start();
        }

        private void btn_Click(object sender, RoutedEventArgs e)
        {
            Button btn = e.Source as Button;
            string dataId = btn.CommandParameter.ToString();
            NoticeView noticeView = new NoticeView(dataId);
            noticeView.WindowStartupLocation = WindowStartupLocation.CenterScreen;
            noticeView.ShowDialog();
        }
    }
}
View Code

效果图:

 技术图片

 

WPF上下滚动字幕

标签:art   none   sch   ble   size   creat   www   column   ret   

原文地址:https://www.cnblogs.com/lonelyxmas/p/10641791.html


评论


亲,登录后才可以留言!