好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

WPF实现上下滚动字幕效果

本文实例为大家分享了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");

查看更多关于WPF实现上下滚动字幕效果的详细内容...

  阅读:49次