WPF上下滚动字幕

原文: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>

后台代码:

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
{
    /// <summary>
    /// 公告滚动显示
    /// </summary>
    public partial class NoticeMarquee : WorkSpaceContent
    {
        private System.Timers.Timer _timer;
        private List<TES_NOTICE> _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<INoticeService>().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();
        }
    }
}

效果图:

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

时间: 2024-11-13 07:56:47

WPF上下滚动字幕的相关文章

滚动字幕

1.Designer.cs代码 namespace FollCaption { partial class Form1 { /// <summary> /// 必需的设计器变量. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// 清理所有正在使用的资源. /// </summary> /// <param name=&

cocos2d-x利用CCClippingNode实现滚动字幕

这周单位要做一个人脸美化的项目,查资料遇到这位大牛的博客,地址如下:点击打开链接 我的代码也是在他的基础上进行修改的,但是他对图像的RGB三个通道平等调节,为了适应我的需求,我改成了针对三个通道分别调节.废话不多说,开始上源码 void ImageAdjust(Mat& src, Mat& dst, vector<double> low_in, vector<double> high_in, vector<double> low_out, vector&

制作由下向上的滚动字幕,字幕内容要求包含网站超级链接和图片超级链接, 使用鼠标移动事件控制字幕运动和停止。 2、在下拉列表框中设置五种以上颜色,选择颜色后, 滚动字幕背景色改变成相应颜色

<!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <title></title>    </head>    <!--        时间:2016-12-28        描述:1.制作由下向上的滚动字幕,字幕内容要求包含网站超级链接和图片超级链接,                   使用鼠标移动事件控制

使用UILabel实现滚动字幕移动效果

这个链接中的代码也实现了这种效果 https://github.com/cbpowell/MarqueeLabel 最终效果如下: 原理如下: 1. 获取文本 2. 计算文本宽度 3. 将这个Label放入ScrollView中 4. 将ScrollView的contentSize的宽度设置与文本宽度一致 5. 做动画 *6. 边缘的渐隐效果请使用带透明像素的PNG图片 // // RootViewController.m // // Copyright (c) 2014年 Y.X. All r

02 HTML 列表 块行元素 滚动字幕 文本图片锚点超链接 相对绝对URL 图片标记

定义列表 <div>和<span> 块元素和行内元素 网页颜色表示 滚动字幕标记 计算机进制 计算机编码介绍 超级链接 超级链接的标记<a></a>,双边标记,是行内元素 URL介绍 绝对URL和相对URL地址 相对URL地址:一般是用于链接本网站中的各个文件的路径. 其它常用的链接 锚点链接:实现在一个网页的不同部分进行跳转 图片标记 定义列表 定义列表的格式: <dl>        <dt>定义标题</dt>    

js原生 + jQuery实现页面滚动字幕

js原生/jQuery实现页面滚动字幕效果 17:45:49 在新闻列表或者文章列表信息等页面中很容易要求实现字幕滚动的效果,以下为简单的实现页面中滚动字幕的效果 1.jQuery实现页面滚动字幕效果 代码如下: <div class="box"> <ul class="list"> <li>这是滚动加载的第1条数据</li> <li>你猜猜这是第几条滚动加载的文字</li> <li>

C#-循环滚动字幕,timer,从左至右,从右至左,暂停---ShinePans

Lable的Left属性是可以更改的,但是 Right属性不可以更改,所以我们可以利用 这个特点做自加 自减运算 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using S

Android之如何用TextView实现滚动字幕的效果【跑马灯】

TextView 实现滚动字幕效果[跑马灯效果]: android:ellipsize="marquee"//可滚动,star(头部),middle(中部),end(尾部) 超出显示不下的内容用...代替, 实现条件 1.必须设置为单行显示,且TextView中的内容超过它的容纳范围, 2.TextView本身没有焦点,必须设置成可获取焦点 <TextView android:layout_width="100dp" android:layout_height

让视频编辑软件中的滚动字幕停下来的方法

我们在看电视电影等等影片时,总会看到结尾的字幕都是从下往上滚动,有的滚动到中间会停留一段时间,有的则是直接滚上去消失不见.那么在EDIUS中,如何做出滚动字幕停下来再滚走的效果呢?下面,小编给大家讲讲EDIUS滚动字幕的那些事. EDIUS滚动字幕停下来的方法如下: 1.单击时间线面板上的创建字幕按钮,在字幕轨T轨上输入文字上,字幕类型保持静止,然后单击保存: 2.在特效面板里,单击“字幕混合”前的小加号,显示全部的字幕特效: 3.根据需求选择拖入特效“飞入A”或“飞入B”到字幕上:“飞入A”是