2017-02-23 5 views
-1

私は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); 
} 

私は私のコントロールの現在の背景から、ない白または任意の定義済みの色からアニメーションを開始することに注意してください。

+3

あなたは[アニメーション]になっているはずです(http://stackoverflow.com/q/14158500/5246145)の代わりに凍結しようとしているのスレッドの実行 – 3615

+0

@ 3615ありがとう、あなたのテキストを答えとしてコピーしないのはなぜですか?あなたのアプローチを私の答えとして受け入れたい。 –

+0

申し訳ありませんが、私はあなたに完全な答えを与える時間がなかったので、私は単にコメントしました。私はそれがあなたを助けてくれてうれしいです:) – 3615

答えて

0
あなたはかなりのスレッドを使用するよりも、ユーザーに警告するトリガーまたはアニメーションを使用することができます

あなたはのxmlnsを追加することができます。sys =「CLR名前空間:システム、アセンブリ= mscorlib」名前空間を文字列をチェックするためには空ですか、ない。あなたのTextBoxコントロールのために、このスタイルは、以下のように

<Style TargetType="{x:Type TextBox}" x:Key="AlertStyle"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Text,RelativeSource={RelativeSource Mode=Self}}" Value="{x:Static sys:String.Empty}"> 
       <Setter Property="Background" Value="Red"></Setter> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 

使用、

<TextBox Width="100" Height="25" Style="{StaticResource AlertStyle}"> 
関連する問題