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.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Threading; namespace SunlightCentralizedControlManagement_SCCM_.UserControls { /// /// RoilingTextBlock.xaml 的交互逻辑 /// public partial class RoilingTextBlock : UserControl { private bool canRoll = false; private readonly double rollingInterval = 0.5;//每一步的偏移量 private double offset=6;//最大的偏移量 private TextBlock currentTextBlock = null; private DispatcherTimer currentTimer = null; public RoilingTextBlock() { InitializeComponent(); Loaded += RoilingTextBlock_Loaded; } void RoilingTextBlock_Loaded(object sender, RoutedEventArgs e) { if (this.currentTextBlock != null) { canRoll = this.currentTextBlock.ActualWidth > this.ActualWidth; } currentTimer = new System.Windows.Threading.DispatcherTimer(); currentTimer.Interval = TimeSpan.FromMilliseconds(100); currentTimer.Tick += new EventHandler(currentTimer_Tick); currentTimer.Start(); } public override void OnApplyTemplate() { try { base.OnApplyTemplate(); currentTextBlock = this.GetTemplateChild("textBlock") as TextBlock; } catch (Exception) { } } void currentTimer_Tick(object sender, EventArgs e) { if (this.currentTextBlock != null && canRoll) { if (Math.Abs(Left) <= this.currentTextBlock.ActualWidth-offset) { Left-=rollingInterval; } else { Left = this.ActualHeight; } } } #region Dependency Properties public static DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(RoilingTextBlock), new PropertyMetadata("")); public static new DependencyProperty FontSizeProperty = DependencyProperty.Register("FontSize", typeof(double), typeof(RoilingTextBlock), new PropertyMetadata(14D)); public static new readonly DependencyProperty ForegroundProperty = DependencyProperty.Register("Foreground", typeof(Brush), typeof(RoilingTextBlock), new FrameworkPropertyMetadata(Brushes.Green)); public static DependencyProperty LeftProperty = DependencyProperty.Register("Left", typeof(double), typeof(RoilingTextBlock), new PropertyMetadata(0D)); public static DependencyProperty TopProperty = DependencyProperty.Register("Top", typeof(double), typeof(RoilingTextBlock), new PropertyMetadata(0D)); #endregion #region Public Variables public string Text { get { return (string)GetValue(TextProperty); } set { SetValue(TextProperty, value); } } public new double FontSize { get { return (double)GetValue(FontSizeProperty); } set { SetValue(FontSizeProperty, value); } } public new Brush Foreground { get { return (Brush)GetValue(ForegroundProperty); } set { SetValue(ForegroundProperty, value); } } public double Left { get { return (double)GetValue(LeftProperty); } set { SetValue(LeftProperty, value); } } public double Top { get { return (double)GetValue(TopProperty); } set { SetValue(TopProperty, value); } } #endregion } }