本文实例为大家分享了WPF上下滚动字幕的具体代码,供大家参考,具体内容如下
XAML代码:
< local:WorkSpaceContent x:Class = "SunCreate.CombatPlatform.Client.NoticeMarquee"
xmlns = "http://schemas.microsoft测试数据/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft测试数据/winfx/2006/xaml"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d = "http://schemas.microsoft测试数据/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();
}
}
}
效果图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://HdhCmsTestcnblogs测试数据/s0611163/archive/2017/10/09/7641153.html
dy("nrwz");