You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
224 lines
7.8 KiB
224 lines
7.8 KiB
using PCScreenSavers.Common;
|
|
using PCScreenSavers.ViewModel;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Media.Animation;
|
|
|
|
namespace PCScreenSavers.Win
|
|
{
|
|
/// <summary>
|
|
/// MarqueeControl.xaml 的交互逻辑
|
|
/// </summary>
|
|
public partial class MarqueeControl : UserControl
|
|
{
|
|
App app = ((App)Application.Current);
|
|
Storyboard std = null;
|
|
DoubleAnimation animation = null;
|
|
int total;
|
|
Class_Log log = new Class_Log();
|
|
public MarqueeControl()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
public MarqueeType ShowType
|
|
{
|
|
get { return (MarqueeType)this.GetValue(ShowTypeProperty); }
|
|
set { this.SetValue(ShowTypeProperty, value); }
|
|
}
|
|
public static readonly DependencyProperty ShowTypeProperty = DependencyProperty.Register("ShowType", typeof(MarqueeType), typeof(MarqueeControl), new PropertyMetadata(MarqueeType.Up));
|
|
|
|
|
|
public double Speed
|
|
{
|
|
get { return (double)this.GetValue(SpeedProperty); }
|
|
set { this.SetValue(SpeedProperty, value); }
|
|
}
|
|
public static readonly DependencyProperty SpeedProperty = DependencyProperty.Register("Speed", typeof(double), typeof(MarqueeControl), new PropertyMetadata(1.5));
|
|
|
|
|
|
public int SubTitleType
|
|
{
|
|
get { return (int)this.GetValue(SubTitleTypeProperty); }
|
|
set { this.SetValue(SubTitleTypeProperty, value); }
|
|
}
|
|
public static readonly DependencyProperty SubTitleTypeProperty = DependencyProperty.Register("SubTitleType", typeof(int), typeof(MarqueeControl), new PropertyMetadata(1));
|
|
|
|
|
|
private void UserControl_Loaded(object sender, RoutedEventArgs e)
|
|
{
|
|
if (ShowType == MarqueeType.Up || ShowType == MarqueeType.Down)
|
|
{
|
|
std = (Storyboard)canvas.Resources["stdUp"];
|
|
content.Width = canvas.ActualWidth;
|
|
txtItem.TextWrapping = TextWrapping.Wrap;
|
|
}
|
|
if (ShowType == MarqueeType.Left || ShowType == MarqueeType.Right)
|
|
{
|
|
std = (Storyboard)canvas.Resources["stdLeft"];
|
|
content.Height = canvas.ActualHeight;
|
|
}
|
|
|
|
|
|
animation = (DoubleAnimation)std.Children[0];
|
|
std.Completed += (t, r) => changeItem();
|
|
}
|
|
|
|
|
|
private List<string> itemsSource;
|
|
public List<string> ItemsSource
|
|
{
|
|
get { return itemsSource; }
|
|
set
|
|
{
|
|
|
|
this.Dispatcher.BeginInvoke(new Action(() =>
|
|
{
|
|
if (std != null)
|
|
{
|
|
std.Stop();
|
|
txtItem.Text = "";
|
|
itemsSource = value;
|
|
if (itemsSource != null && itemsSource.Count > 0)
|
|
{
|
|
if (SubTitleType == 1)
|
|
{
|
|
app.TopSubTitleIndex = 0;
|
|
}
|
|
else
|
|
{
|
|
app.BottomSubTitleIndex = 0;
|
|
}
|
|
total = value.Count;
|
|
changeItem();
|
|
}
|
|
}
|
|
}));
|
|
}
|
|
}
|
|
|
|
|
|
private void changeItem()
|
|
{
|
|
try
|
|
{
|
|
|
|
if (SubTitleType == 1)
|
|
{
|
|
if (app.TopSubTitleIndex >= itemsSource.Count)
|
|
{
|
|
app.TopSubTitleIndex = 0;
|
|
ItemsSource = null;
|
|
app.TopSubTitle.Clear();
|
|
if (std != null)
|
|
{
|
|
std.Begin();
|
|
}
|
|
return;
|
|
}
|
|
txtItem.Text = app.TopSubTitle[app.TopSubTitleIndex].Replace("\n", "").ToString();
|
|
}
|
|
else
|
|
{
|
|
if (app.BottomSubTitleIndex >= itemsSource.Count)
|
|
{
|
|
app.BottomSubTitleIndex = 0;
|
|
ItemsSource = null;
|
|
//ItemsSource = app.BottomSubTitle;
|
|
app.BottomSubTitle.Clear();
|
|
if (std != null)
|
|
{
|
|
std.Begin();
|
|
}
|
|
return;
|
|
}
|
|
txtItem.Text = app.BottomSubTitle[app.BottomSubTitleIndex].Replace("\n", "").ToString();
|
|
}
|
|
|
|
//if (index >= itemsSource.Count)
|
|
//{
|
|
// index = 0;
|
|
// if (SubTitleType == 1)
|
|
// {
|
|
// //ItemsSource = app.TopSubTitle;
|
|
// ItemsSource = null;
|
|
// app.TopSubTitle.Clear();
|
|
// log.WriteLogFile("清空app.TopSubTitle" + app.TopSubTitle.Count);
|
|
// }
|
|
// else
|
|
// {
|
|
// ItemsSource = null;
|
|
// //ItemsSource = app.BottomSubTitle;
|
|
// app.BottomSubTitle.Clear();
|
|
// log.WriteLogFile("清空app.BottomSubTitle" + app.BottomSubTitle.Count);
|
|
// }
|
|
// if (std != null)
|
|
// {
|
|
// std.Begin();
|
|
// }
|
|
//}
|
|
|
|
|
|
txtItem.UpdateLayout();
|
|
//double canvasWidth = canvas.ActualWidth;
|
|
double canvasWidth = canvas.ActualWidth;
|
|
double canvasHeight = canvas.ActualHeight;
|
|
double txtWidth = txtItem.ActualWidth;
|
|
double txtHeight = txtItem.ActualHeight;
|
|
if (ShowType == MarqueeType.Up)
|
|
{
|
|
animation.From = canvasHeight;
|
|
animation.To = -txtHeight;
|
|
}
|
|
else if (ShowType == MarqueeType.Down)
|
|
{
|
|
animation.From = -txtHeight;
|
|
animation.To = canvasHeight;
|
|
}
|
|
else if (ShowType == MarqueeType.Left)
|
|
{
|
|
animation.From = canvasWidth;
|
|
animation.To = -txtWidth;
|
|
}
|
|
else if (ShowType == MarqueeType.Right)
|
|
{
|
|
animation.From = -txtWidth;
|
|
animation.To = canvasWidth;
|
|
}
|
|
int time = 0;
|
|
if (ShowType == MarqueeType.Up || ShowType == MarqueeType.Down)
|
|
{
|
|
//time = (int)(txtHeight / canvasHeight * Speed);
|
|
time = (int)((canvasHeight+ txtHeight) / Speed);
|
|
}
|
|
if (ShowType == MarqueeType.Left || ShowType == MarqueeType.Right)
|
|
{
|
|
//time = (int)(txtWidth / canvasWidth * Speed);
|
|
time = (int)((canvasWidth+ txtWidth) / Speed);
|
|
}
|
|
if (time < 2) time = 2;
|
|
animation.Duration = new Duration(new TimeSpan(0, 0, time));
|
|
if (std != null)
|
|
{
|
|
std.Begin();
|
|
}
|
|
if (SubTitleType == 1)
|
|
{
|
|
app.TopSubTitleIndex++;
|
|
}
|
|
else
|
|
{
|
|
app.BottomSubTitleIndex++;
|
|
}
|
|
//index++;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
log.WriteLogFile(e.Message, "subtitle");
|
|
//throw;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|