Ich möchte meinem WPF ein einfaches Verhalten hinzufügen (zumindest dachte ich, dass es das ist) TextBox
.
Wenn der Benutzer die Esc-Taste drückt TextBox
, soll der Text, den er bearbeitet, den Text enthalten, den er zu Beginn der Bearbeitung hatte, UND ich möchte den Fokus aus dem entfernen TextBox
.
Ich habe kein Problem damit, den Text auf den Wert einzustellen, den er zu Beginn der Bearbeitung hatte.
Das Problem besteht darin, den Fokus des Elements zu entfernen. Ich möchte den Fokus nicht auf eine andere Komponente verschieben, sondern nur den TextBox
Fokus verlieren. Muss ich ein unsichtbares Element haben, um den Fokus einzustellen, damit ich TextBox
den Fokus verlieren kann?
Keyboard.ClearFocus()
nach einem Klick irgendwo von CodeBehind aus laufe .ClearFocus
bewirktGotFocus
, dass die kürzlich fokussierte Steuerung nicht ausgelöst wird, während sie weiterhin für andere Steuerelemente ausgelöst wird. Das ist zum Beispiel ein großes Problem für meine benutzerdefinierte Bildschirmtastatur. Es führt dazu, dass das Caret verschwindet, was wahrscheinlich alles ist, was "Tastaturfokus" mit sich bringt. Vielleicht interessiert mich mehr etwas wie "Mausfokus".other.Focus()
.GotFocus
Ereignis ausgelöst wird ). Es gibt immer etwas mit logischem Fokus in Ihrem Programm. Verwenden Sie entweder dasLostKeyboardFocus
Ereignis oder verschieben Sie den Fokus auf ein anderes Element (wodurch auch der logische Fokus verschoben wird), bevor Sie den Tastaturfokus löschen.Der Code, den ich verwendet habe:
quelle
Ein bisschen spät zur Party, aber es war hilfreich für mich, also los geht's.
Seit .Net 3.0
FrameworkElement
hat eine MoveFocus- Funktion, die den Trick für mich getan hat.quelle
Da keine der oben genannten Antworten für mich funktioniert hat und die akzeptierte Antwort nur für einen Tastaturfokus funktioniert, bin ich zu folgendem Ansatz gekommen:
Tötet sowohl den logischen als auch den Tastaturfokus.
quelle
Sie können den Fokus auf einen fokussierbaren Vorfahren setzen. Dieser Code funktioniert auch dann, wenn sich das Textfeld in einer Vorlage ohne fokussierbare Vorfahren in derselben Vorlage befindet:
quelle
AFAIK, es ist nicht möglich, den Fokus vollständig zu entfernen. Etwas in Ihrem Fenster wird immer den Fokus haben.
quelle
In der Windows Phone-Entwicklung habe ich es gerade getan
Focus()
oderthis.Focus()
in der PhoneApplicationPage, und es hat wie ein Zauber funktioniert.quelle
Für mich ist es ziemlich schwierig, besonders wenn ich es mit LostFocus-Bindung verwende. Meine Problemumgehung besteht jedoch darin, ein leeres Etikett hinzuzufügen und sich darauf zu konzentrieren.
...
quelle
Meine Antwort spricht die obige Frage nicht direkt an, aber ich habe das Gefühl, dass der Wortlaut dazu geführt hat, dass sie zu "Die Frage" über das programmgesteuerte Entfernen des Fokus wurde. Ein häufiges Szenario, in dem dies erforderlich ist, besteht darin, dass der Benutzer den Fokus löschen kann, wenn er mit der linken Maustaste auf den Hintergrund eines Root-Steuerelements wie eines Fensters klickt.
Um dies zu erreichen, können Sie ein angefügtes Verhalten erstellen, das den Fokus auf ein dynamisch erstelltes Steuerelement (in meinem Fall ein leeres Etikett) umschaltet. Es ist vorzuziehen, dieses Verhalten für Elemente der höchsten Ebene wie Fenster zu verwenden, da es die untergeordneten Elemente durchläuft, um ein Bedienfeld zu finden, dem eine Dummy-Beschriftung hinzugefügt werden kann.
quelle