我想让我TextBox
间歇性地眨眼.
我有这个方法
private void abilitaAltroToken(int indiceRiga, Grid grid) { UIElement element = grid.Children[indiceRiga]; Label label = (Label)element; element = grid.Children[++indiceRiga]; TextBox textBox = (TextBox)element; textBox.Background = Brushes.Blue; label.Background = Brushes.Blue; Thread.Sleep(1000); label.Background = Brushes.White; Thread.Sleep(1000); label.Background = Brushes.Blue; Thread.Sleep(1000); label.Background = Brushes.White; Thread.Sleep(1000); label.Background = Brushes.Blue; }
此代码不会返回错误,但不会发生闪烁.
首先,您不应该将Thread.Sleep放在您的Main(UI)线程代码中,这将使UI线程处于休眠状态,并且您不会在UI上看到任何更改.
就个人而言,我会使用动画(在XAML中也是如此)和Triggers/VisualStates来实现你在这里尝试的东西.
但是,由于我对XAML的了解不多,以下是实现标签闪烁的程序代码:
var colorAnim = new ColorAnimationUsingKeyFrames() { KeyFrames = new ColorKeyFrameCollection { new DiscreteColorKeyFrame(Colors.White, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.5))), new DiscreteColorKeyFrame(Colors.Blue, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(1))), new DiscreteColorKeyFrame(Colors.White, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(1.5))), new DiscreteColorKeyFrame(Colors.Blue, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(2))), } }; var storyBoard = new Storyboard(); storyBoard.Children.Add(colorAnim); Storyboard.SetTarget(storyBoard, label); Storyboard.SetTargetProperty(storyBoard, new PropertyPath("(Background).(SolidColorBrush.Color)")); storyBoard.Begin();
基本上,我从您的问题中翻译了以下代码段:
Thread.Sleep(1000); label.Background = Brushes.White; Thread.Sleep(1000); label.Background = Brushes.Blue; Thread.Sleep(1000); label.Background = Brushes.White; Thread.Sleep(1000); label.Background = Brushes.Blue;