私はWPF(C#)でプログラミングしています。私は空のテキストボックス(または他のコントロール)を埋めることについてユーザーに警告したい。私は彼/彼女に警告するために制御をフラッシュしたい。それが見られるように、私もAction
を使用しますが、それは動作しません、Control Cのバックグラウンドを変更してユーザに警告する
static void AlertByChangingBackground(Control control)
{
Action a =() =>
{
control.Background = System.Windows.Media.Brushes.Red;
Thread.Sleep(500);
control.Background = System.Windows.Media.Brushes.White;
};
control.Dispatcher.Invoke(a);
}
:これは私がそれらを使用するが、それは、色を変更しないコードです。 Sleep
メソッドの前にcontrol.UpdateLayout()
も使用しますが、機能しません。どうすれば問題を解決できますか?
アップデート1:
は今、私は、下記に示すコードを使用します。しかし問題は、関数が何回か呼び出されたとき(特に短時間で連続して呼び出されたとき)、テキストの色が最初の色に戻らないときです。たとえば、私のコントロールは赤色のままです。どうすれば修正できますか?
public static void AlertByChangingBackground(Control control)
{
Action a =() =>
{
ColorAnimation animation;
animation = new ColorAnimation();
animation.From = Colors.Red;
animation.To = ToColor(control.Background);
animation.Duration = new Duration(new TimeSpan(0, 0, 0, 0, 330));
RepeatBehavior rb = new RepeatBehavior(3);
animation.RepeatBehavior = rb;
control.Background = new SolidColorBrush(Colors.Red);
control.Background.BeginAnimation(SolidColorBrush.ColorProperty, animation);
};
control.Dispatcher.BeginInvoke(a);
}
私は私のコントロールの現在の背景から、ない白または任意の定義済みの色からアニメーションを開始することに注意してください。
あなたは[アニメーション]になっているはずです(http://stackoverflow.com/q/14158500/5246145)の代わりに凍結しようとしているのスレッドの実行 – 3615
@ 3615ありがとう、あなたのテキストを答えとしてコピーしないのはなぜですか?あなたのアプローチを私の答えとして受け入れたい。 –
申し訳ありませんが、私はあなたに完全な答えを与える時間がなかったので、私は単にコメントしました。私はそれがあなたを助けてくれてうれしいです:) – 3615