Wie kann ich dafür sorgen, dass ein Steuerelement den Fokus verliert, wenn der Benutzer auf etwas klickt, das nicht fokussierbar ist?

StackOverflow https://stackoverflow.com/questions/2298913

  •  21-09-2019
  •  | 
  •  

Frage

Ich habe ein ItemsControl, das mit Dutzenden von Elementen gefüllt ist.Jedes Element besteht aus einem gebundenen Textfeld und einigen Schaltflächen.Da ich möchte, dass der Benutzer von Textfeld zu Textfeld wechseln kann, ist für die Schaltflächen „Fokussierbar“ auf „Falsch“ gesetzt.Das funktioniert ganz gut.Das einzige Problem besteht darin, dass die Textfelder nicht den Fokus verlieren und ihre Bindung die Quelle nicht aktualisiert, sodass der Code hinter den Schaltflächen nicht mit den richtigen Werten funktioniert.

Ich kann mir eine Möglichkeit vorstellen, das Problem zu beheben, z. B.Wenn der Click-Handler für die Schaltflächen durch die logische Struktur zu dem zugehörigen Textfeld navigiert und die Quelle explizit aktualisiert wird, ist dies zwingend erforderlich.Aber es scheint mir, dass es einen besseren Weg geben muss, der mir wahrscheinlich klar wäre, wenn ich das Fokusmodell besser verstehen würde.Ist da?

War es hilfreich?

Lösung

Da die Leistung ein Problem darstellt, finden Sie möglicherweise ein Problem Artikel geschrieben von Josh Smith nützlich.Der Kontext ist deinem Problem sehr ähnlich.Josh löst das Problem, indem er die Bindungsaktualisierung manuell auslöst:

    TextBox focusedTextBox = Keyboard.FocusedElement as TextBox;
    if (focusedTextBox == null)
        return;

    BindingExpression textBindingExpr = 
      focusedTextBox.GetBindingExpression(TextBox.TextProperty);
    if (textBindingExpr == null)
        return;

    textBindingExpr.UpdateSource();

Andere Tipps

Wenn die Leistung ermöglicht, können Sie die ändern UpdateSourceTrigger dieser Textboxelemente zu PropertyChanged Anstatt von LostFocus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top