Ich entwickle eine WPF Anwendung und habe folgende Problematik:
Beim Klick auf OK soll vor dem Speichern geprüft werden, ob irgendwo fehlerhafte Felder existieren. Wenn ja, dann soll das ERSTE fehlerhafte Feld fokussiert werden. Das bekomme ich mit Hilfe des VisualTreeHelpers hin - aber nur, wenn ich keine TabControls o. ä. habe...
Wenn ich z. B. auf der dritten Registerkarte stehe, und auf der Ersten noch ein fehlerhaftes Feld ist (das kann leider vorkommen und ist so gewünscht!), dann muss ich auch die Felder auf der ersten Registerkarte einbeziehen und ggf. den Fokus dorthin setzen.
In diesem Zustand (Tab3 aktiviert) sehe ich aber nur die Controls des 3. TabItem im VisualTree. Auch der LogicalTreeHelper konnte mir nicht helfen.
Wie kann man hier vorgehen?
Das WPF TabControl
erzeugt beim Selektieren von einem TabItem
immer dieses neu und verwirft das vorherige (daher ist nur noch das aktuell selektierte im VisualTree vorhanden), s.a. WPF TabControl: Turning Off Tab Virtualization.
Ansonsten müßtest du über alle Items iterieren und jeweils der Reihe nach diese selektieren, s.a. Iterate through TabItems in a TabControl:
tabControl.SelectedIndex = i;
UpdateLayout();
Nun sollte der VisualTree für das selektierte TabItem
verfügbar sein.
Vielen Dank für die interessante Antwort! Sie hat mir sehr geholfen!
Die Lösung aus dem Link habe ich noch nicht getestet. Sieht aber sehr vielversprechend aus.
Der einfache Ansatz, über alle Items zu iterieren, funktioniert jedenfalls grundsätzlich. Ich habe derzeit noch ein paar Probleme im Detail, aber die bekomme ich hoffentlich noch in den Griff.
Danke!