TextBox LostFocus wird nicht angezeigt, wenn Sie auf bestimmte andere Steuerelemente klicken

8

In der folgenden einfachen WPF-Anwendung wird ein TextBox so eingestellt, dass eine Eigenschaft aktualisiert wird, wenn der Fokus von diesem Steuerelement verloren geht, wie zum Beispiel

%Vor%

Wenn ich diese Anwendung ausführe, geben Sie jedoch einen Text in das Textfeld ein und klicken dann auf die Schaltfläche "Test". Mein Haltepunkt in der MyString -Eigenschaft ist nicht und auch kein Ereignishandler für Das Ereignis FocusLost wird ebenfalls nicht ausgelöst. Diese Ereignisse werden nur ausgelöst, wenn der Fokus von der Steuerung auf andere Weise verloren geht (z. B. wenn das Fenster geschlossen ist).

Dies verursacht Probleme für uns, da in Wirklichkeit die "Test" -Schaltfläche eine Logik enthält, die darauf beruht, dass die Eigenschaft MyString aktualisiert wird.

Wie kann ich sicherstellen, dass das Ereignis FocusLost korrekt ausgelöst wird und die Bindung aktualisiert wird, wenn ich auf die Schaltfläche "Test" klicke? Es scheint, dass das Problem irgendwie durch die Verwendung von ToolBar verursacht wird, da das Ersetzen von ToolBar durch eine Standardschaltfläche nicht zu diesem Verhalten führt.

    
Justin 04.06.2013, 11:39
quelle

3 Antworten

2

In diesem Fall verliert das Textfeld nicht den logischen Fokus und daher wird das Ereignis nie ausgelöst - im Wesentlichen möchte ich, dass das LostKeyboardFocus -Ereignis und nicht das LostFocus -Ereignis das Update auslöst.

Dieses Problem ähnelt WPF: Datengebunden TabControl gibt keine Änderungen aus, wenn die neue Registerkarte ausgewählt ist und es gibt ein Microsoft Connect-Element dafür hier mit einer Reihe von möglichen Lösungen, jedoch habe ich dies mit einer angehängten Eigenschaft wie folgt behoben.

%Vor%

Dies bedeutet nur, dass, wenn LostKeyboardFocus für dieses Steuerelement ausgelöst wird, es weitergeht und ein zusätzliches LostFocus -Ereignis auslöst, wodurch die Bindung aktualisiert wird. Es ist so verwendet

%Vor%     
Justin 04.06.2013, 11:58
quelle
2

Ihre angefügte Eigenschaft macht einige Annahmen:

  • dass nichts von der Unterscheidung zwischen LostKeyboardFocus und LostFocus events
  • abhängt
  • dass die Bindungen auf dem Element, an das es angehängt ist, tatsächlich auf das LostFocus -Ereignis reagieren (sie könnten UpdateSourceTrigger.Explicit )

Stattdessen können Sie die Bindungen für das Element aufzählen und direkt aufrufen UpdateSource :

%Vor%

Anstatt jeden TextBox einzeln zu behandeln, könnten Sie auch den Container behandeln und OldFocus , um das tatsächliche Element zu erhalten, das den Tastaturfokus verloren hat.

    
nmclean 04.06.2013 12:35
quelle
0

Das folgende Verhalten wird das beheben:

%Vor%

Sie können es wie folgt an Ihre TextBox anhängen:

%Vor%     
Matt Sinclair 02.10.2015 11:02
quelle

Tags und Links