zoukankan      html  css  js  c++  java
  • 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
    {
        /// <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("
    ", string.Empty);
                        btn1.CommandParameter = data1.ID;
                        btn1.ToolTip = data1.NOTICE_CONTENT;
                    }
    
                    if (data2 != null)
                    {
                        btn2.Content = data2.NOTICE_CONTENT.Trim().Replace("
    ", string.Empty);
                        btn2.CommandParameter = data2.ID;
                        btn2.ToolTip = data2.NOTICE_CONTENT;
                    }
    
                    if (data3 != null)
                    {
                        btn3.Content = data3.NOTICE_CONTENT.Trim().Replace("
    ", 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

    效果图:

     

  • 相关阅读:
    MapReduce程序遇见java.net.UnknownHostException
    吐槽下《Hadoop权威指南(第二版)》的翻译
    HFileOutputFormat与TotalOrderPartitioner
    关于hive multi group by的疑惑
    Hive解决 java.io.IOException:SerDeException:LazySimpleSerDe
    一个字符编码引发的血案
    CSS颜色代码大全
    C#中ParameterizedThreadStart和ThreadStart区别
    Sql Server REPLACE函数的使用
    QueryString的用法
  • 原文地址:https://www.cnblogs.com/s0611163/p/7641153.html
Copyright © 2011-2022 走看看