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.
		
		
		
		
		
			
		
			
				
					
					
						
							127 lines
						
					
					
						
							4.1 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							127 lines
						
					
					
						
							4.1 KiB
						
					
					
				| 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 | |
| { | |
|     /// <summary> | |
|     /// RoilingTextBlock.xaml 的交互逻辑 | |
|     /// </summary> | |
|     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 | |
|     } | |
| }
 | |
| 
 |