2017-02-23 2 views
-1

Ich programmiere in WPF (C#). Ich möchte Benutzer darauf aufmerksam machen, leere Textfelder (oder andere Steuerelemente) zu füllen. Ich möchte die Kontrolle blitzen, um ihn/sie zu warnen. Dies ist der Codes, die ich sie verwendet, aber es nicht die Farbe ändern:Alarmierung des Benutzers durch Ändern des Hintergrunds der Steuerung 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); 
} 

Wie es zu sehen ist, kann ich Action auch, aber es funktioniert nicht. Ich benutze auch control.UpdateLayout() vor Sleep Methode, aber es funktioniert auch nicht. Wie kann ich das Problem beheben?

Update 1:

Nun verwende ich Codes unten dargestellt. Das Problem ist jedoch, wenn die Funktion mehrere Male aufgerufen wird (insbesondere wenn sie in kurzen Zeiten kontinuierlich aufgerufen wird), dass die Farbe des Texts nicht zu seiner ersten Farbe zurückkehrt. Zum Beispiel kann meine Kontrolle in roter Farbe bleiben. Wie kann ich es reparieren?

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

Ich stellt fest, dass ich Animation von aktuellem Hintergrund meiner Kontrolle, nicht aus wissen oder jede vordefinierte Farbe beginnen soll.

+3

Sie sollten schauen Sie in [Animationen] (http://stackoverflow.com/q/14158500/5246145) statt einzufrieren zu versuchen, die Ausführung des Threads. – 3615

+0

@ 3615 Vielen Dank, warum kopieren Sie Ihren Text nicht als Antwort? Ich möchte deinen Ansatz als meine Antwort akzeptieren. –

+0

Entschuldigung, ich hatte keine Zeit, Ihnen eine vollständige Antwort zu geben, deshalb habe ich nur kommentiert. Ich bin froh, dass es Ihnen geholfen hat :) – 3615

Antwort

0

Sie Auslöser oder Animationen verwenden können, um den Benutzer zu alarmieren, anstatt Faden,

Sie Xmlns hinzufügen: sys = „clr-namespace: System, Montage = mscorlib“ Namespace für die Zeichenfolge Überprüfung ist noch leer oder nicht.

<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> 

Verwendung dieser Stil für Ihre Steuer TextBox wie folgt,

<TextBox Width="100" Height="25" Style="{StaticResource AlertStyle}"> 
Verwandte Themen