Ich habe ein Tab-Steuerelement und ein paar Registerkarte Elemente. Ich höre erfolgreich das Ereignis SelectionChanged
und überprüfe, ob der Tab, an dem ich interessiert bin, der aktuell ausgewählte ist.WPF TabControl On SelectionChanged, setzen Sie den Fokus auf ein Textfeld
Ich benutze diesen Code (unten), und beim Durchlaufen des Debuggers kann ich sehen, dass meine Verzweigungslogik wie vorgesehen funktioniert; Das Problem, das ich habe, ist jedoch, dass etwas diesen Aufruf an txt.Focus()
überschreibt, da nach dem Anzeigen des richtigen Registerkartenelements der Fokus nicht auf dem Textfeld ist.
private void tabMain_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// exact same behavior with and without this line
e.Handled = true;
if (e.AddedItems.Contains(usrTab))
{
txtusr.Focus();
}
else if (e.AddedItems.Contains(svcTab))
{
txtsvc.Focus();
}
}
Wenn ich in eine Schaltfläche Event-Handler setzen txtusr.Focus()
nur, es konzentriert sich genau so, wie ich erwarten würde.
Ich vermute, dass dies mit dem Tabitem-Inhalt zu dem Zeitpunkt, als die .Focus()
-Methode aufgerufen wird, nicht geladen wird, aber ich bin mir nicht sicher, wie es geht, um es zu beheben.
Haben Sie das Problem extern zu Ihrem Code isoliert, um zu sehen, ob es reproduzierbar ist? Wenn dies der Fall ist, handelt es sich um ein Timing-/Framework-Problem, und dann können Sie das Problem mit diesem Wissen etwas anders angehen. –
konnte ich dies in einem Stub-Programm inkonsistent reproduzieren. – Nate