Wie kann ich den Fokus auf eine ListBox korrekt auf die laden, wenn Sie verwendet databinding?
Ich in der Regel rufen myControl.Focus()
im Loaded-Ereignis-handler, aber das scheint nicht zu funktionieren für eine ListBox
die Datenbindung, um eine Liste der benutzerdefinierten Objekten. Wenn ich meine Anwendung, die ListBox
's erste Element ist ausgewählt, aber der Schwerpunkt liegt anderswo.
Ich dachte, das könnte sein, weil der Fokus eingestellt wird, bevor die datengebundene Elemente geladen werden... aber der folgende code zeigt, dass es tatsächlich Dinge, weil ctrlItemsCount
zeigt die Zahl 8.
Wie kann ich einstellen, dass der erste Schwerpunkt in dieser situation, und was ist der richtige Ort, um anfängliche Schwerpunkt in der Regel?
private void onLoad(object sender, RoutedEventArgs e) {
if (ctrlCountries.Items.Count > 0) {
ctrlItemsCount.Text = ctrlCountries.Items.Count;
ctrlCountries.SelectedIndex = 0;
FocusManager.SetFocusedElement(this, ctrlCountries);
}
}
EDIT: ich zog Sie diesen code in das loaded-Ereignis für die tatsächliche ListBox
selbst. Es fast funktioniert, der Schwerpunkt liegt jetzt auf der ListBox
, aber ich muss immer noch drücken Sie die Tastatur nach UNTEN einmal, bevor Sie Einzelteil #0 hat den Tastatur-cursor. In anderen Worten, der focus, oder der cursor befindet, ist 1 Kerbe oben Element #0 aus irgendeinem Grund:
private void onCountriesLoaded(object sender, RoutedEventArgs e) {
ctrlCountries.SelectedIndex = 0;
FocusManager.SetFocusedElement(this, ctrlCountries);
Keyboard.Focus();
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie sich konzentrieren möchten, das erste element in der Liste setzen Sie den Fokus auf das erste ListBoxItem container. Zum Beispiel:
Haben Sie immer noch, aber darauf achten, dass die ListBox Kontrolle hat, den ersten erhielt seine Geladen Veranstaltung. Es gibt eine Reihe von anderen Veranstaltungen, sind hilfreich für die Handhabung der Liste box item-bezogenen updates. Haben Sie einen Blick auf die ItemContainerGenerator in MSDN.
Den
FocusManager.SetFocusedElement
Methode gibt logischer Schwerpunkt, aber nicht den Tastatur-Fokus. Sie können dieTastatur.Focus
Methode zu geben, den Tastatur-Fokus für ein element. Haben Sie einen Blick auf auf dieser Seite für mehr details über die " focus-management in WPF.