forked from yanw/App_win_iot_V2.0
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.
165 lines
5.5 KiB
165 lines
5.5 KiB
using IOTContainer.Common;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
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 IOTContainer.View
|
|
{
|
|
/// <summary>
|
|
/// MarqueeControl.xaml 的交互逻辑
|
|
/// </summary>
|
|
public partial class MarqueeControl : UserControl
|
|
{
|
|
Storyboard std = null;
|
|
DoubleAnimation animation = null;
|
|
|
|
int Speed = 150;
|
|
string showText = string.Empty;
|
|
public MarqueeControl()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
public void Load(string text, double width, double height, string fontSize, string backgroundColor, int? backgroundOpacity, string fontColor, string fontStyle, string animationSpeed)
|
|
{
|
|
try
|
|
{
|
|
std = (Storyboard)canvas.Resources["stdLeft"];
|
|
this.Height = height;
|
|
this.Width = width;
|
|
canvas.Width = width;
|
|
canvas.Height = height;
|
|
content.Height = height;
|
|
canvas.VerticalAlignment = VerticalAlignment.Center;
|
|
content.VerticalAlignment = VerticalAlignment.Center;
|
|
|
|
|
|
txtItem.FontSize = Convert.ToDouble(fontSize);
|
|
BrushConverter converter = new BrushConverter();
|
|
if (!string.IsNullOrEmpty(backgroundColor))
|
|
{
|
|
SolidColorBrush brush = (SolidColorBrush)converter.ConvertFromString(backgroundColor);
|
|
if (backgroundOpacity != null)
|
|
{
|
|
brush.Opacity = backgroundOpacity.Value / 100.0;
|
|
}
|
|
|
|
canvas.Background = brush;
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(fontColor))
|
|
{
|
|
Brush newFill = (Brush)converter.ConvertFromString(fontColor);
|
|
txtItem.Foreground = newFill;
|
|
}
|
|
if (!string.IsNullOrEmpty(fontStyle))
|
|
{
|
|
switch (fontStyle)
|
|
{
|
|
case "正常":
|
|
txtItem.FontStyle = FontStyles.Normal;
|
|
break;
|
|
case "加粗":
|
|
txtItem.FontWeight = FontWeights.Bold;
|
|
break;
|
|
case "斜体":
|
|
txtItem.FontStyle = FontStyles.Italic;
|
|
break;
|
|
case "加粗、斜体":
|
|
txtItem.FontStyle = FontStyles.Italic;
|
|
txtItem.FontWeight = FontWeights.Bold;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
if (!string.IsNullOrEmpty(animationSpeed))
|
|
{
|
|
switch (animationSpeed)
|
|
{
|
|
case "慢":
|
|
Speed = 50;
|
|
break;
|
|
case "中等":
|
|
Speed = 90;
|
|
break;
|
|
case "快":
|
|
Speed = 130;
|
|
break;
|
|
case "很快":
|
|
Speed = 180;
|
|
break;
|
|
default:
|
|
Speed = 90;
|
|
break;
|
|
}
|
|
}
|
|
animation = (DoubleAnimation)std.Children[0];
|
|
std.Completed += (t, r) => changeItem();
|
|
showText = text;
|
|
std.Completed += delegate
|
|
{
|
|
if (txtItem.Visibility != Visibility.Visible)
|
|
{
|
|
txtItem.Visibility = Visibility.Visible;
|
|
txtItem.Text = showText;
|
|
}
|
|
|
|
};
|
|
changeItem();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("Load:" + ex.ToString(), "MarqueeControl");
|
|
}
|
|
}
|
|
private void changeItem()
|
|
{
|
|
try
|
|
{
|
|
txtItem.Text = showText;
|
|
txtItem.UpdateLayout();
|
|
|
|
double canvasWidth = canvas.ActualWidth;
|
|
double canvasHeight = canvas.ActualHeight;
|
|
double txtWidth = txtItem.ActualWidth;
|
|
double txtHeight = txtItem.ActualHeight;
|
|
|
|
animation.From = canvasWidth;
|
|
animation.To = -txtWidth;
|
|
|
|
int time = 0;
|
|
|
|
time = (int)((canvasWidth + txtWidth) / Speed);
|
|
if (time < 2) time = 2;
|
|
animation.Duration = new Duration(new TimeSpan(0, 0, time));
|
|
|
|
if (std != null)
|
|
{
|
|
std.Begin();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("Load:" + ex.ToString(), "MarqueeControl");
|
|
}
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
std.Stop();
|
|
std.Children.Clear();
|
|
}
|
|
}
|
|
}
|
|
|