2017-05-19 6 views
1

Ich habe einen Schieberegler und sowohl die App als auch der Benutzer werden Anpassungen vornehmen. Der Schieberegler löst das ValueChanged-Ereignis aus, wenn sich der Wert ändert, aber ich möchte das nur auslösen, wenn es vom Benutzer stammt, dh die Maus- oder Tastatureingabe hat es geändert. Ich schätze, ich könnte es auf die harte Tour machen und Maus- und Tastaturereignisse überprüfen und einen Booler setzen, aber ich würde lieber alles in einem Event behandeln, wenn möglich.Überprüfen Sie, ob ein Wertänderungsereignis vom Benutzer ausgelöst wurde.

Wie überprüfe ich, wer den Wert geändert hat?

private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) { 
    if(wasUser) { 
     ... 
    } 
} 

Antwort

1

Die schnelle und schmutzige Art und Weise ist die Tatsache zunutze zu tragen, dass Event-Handler synchron über Immobilien-Setter genannt werden - so ein Feld (zugänglich von allen Handler) gesetzt Ereignisse, wenn das aktuelle Ereignis selektiv zu ignorieren wurde indirekt von einem vorherigen Event-Handler ausgelöst, anstelle von direkten Benutzeraktionen.

Betrachten sie ein Textfeld, das seinen Text durch das Programm, oder getippte-in vom Benutzer festgelegt haben kann:

class MyWindow : Window { 

    private Boolean isIndirectEvent = false; 

    void Timer_Tick() { 

     this.isIndirectEvent = true; 
     this.TextBox.Text = "foo"; // TextBox_TextChanged will be invoked inside this property's setter 
     this.isIndirectEvent = false; 
    } 

    void TextBox_TextChanged(Object sender, EventArgs e) { 

     if(this.isIndirectEvent) return; 

     this.InvokeTurboEncabulator(); 
    } 
} 

(Natürlich ist der „beste“ Ansatz MVVM, Abhängigkeitseigenschaften zu verwenden wäre und Data Bindings, die diese ganze Klasse von Problemen vollständig umgeht, aber das erfordert erhebliche Änderungen an Ihrem Programm, fwiw).

+0

Ich entschied mich, dies zu tun. Wenn das Programm aktualisiert wird, setze ich "UserChangedValue" auf "false". – bwoogie

Verwandte Themen