时间:2021-05-20
本文实例为大家分享了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(); } }}效果图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本例主要讲解利用【标尺】和【遮罩层】来制作上下滚动字幕。下面详细教你如何制作上下滚动字幕。 1、点击开始菜单程序文件夹里的An软件,即打开An软件,如下图
本文实例讲述了js实现带按钮的上下滚动效果。分享给大家供大家参考。具体实现方法如下:js带按钮上下滚动效果ul{margin:0;padding:0;list-
本文实例为大家分享了jquery实现广告上下滚动效果的具体代码,供大家参考,具体内容如下一、jquery上下滚动预约记录jquery广告上下滚动效果,直接上代码
本文实例讲述了Android编程实现类似天气预报图文字幕垂直滚动效果的方法。分享给大家供大家参考,具体如下:在很多天气或者新闻的应用中,我们都能看到一些字幕滚动
实现文字上下滚动是经常用到的js效果,这里介绍一种上下渐隐渐出的文字展现效果!文字滚动#sidebar{width:200px;height;500px;ove