Laden...

WPF - Tabstop: Überall deaktivieren, wenn kein Index gesetzt?

Erstellt von Palladin007 vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.598 Views
Palladin007 Themenstarter:in
2.080 Beiträge seit 2012
vor 8 Jahren
WPF - Tabstop: Überall deaktivieren, wenn kein Index gesetzt?

Hi,

ich bin gerade dabei, in meinem Projekt die Arbeit mit der Tastatur zu vereinfachen, das heißt aber auch, die Reihenfolge, in der man mit der Tab-Taste durch die View gehen kann, genau fest zu legen.

Nun stehe ich aber vor dem Problem, dass ich sehr oft Tab drücken muss, nachdem die von mir explizit festgelegten Controls (Die haben einen entsprechenden TabIndex bekommen) durchlaufen wurden.
Ich vermute, dass die Auswahl noch andere Controls durch geht, bei denen das aber einfach nicht sichtbar ist.

Daher mein Gedanke: Kann ich das für alle Controls (über die IsTabStop-Property) deaktivieren, wenn nicht explizit ein Index fest gelegt wurde? Default ist int.MaxValue
Der Default von IsTabStop ist true

Ich habe es ganz simpel mit einem Style ohne Key und dem TargetType Control versucht und binde dann den Index mit einem passenden Converter an die IsTabStop-Property. Das Ergebnis ist genau nichts, es hat keine sichtbare Auswirkung.

Kennt jemand einen anderen einfacheren oder besseren Weg?

Besten Dank

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

P
40 Beiträge seit 2011
vor 8 Jahren

Wir haben sowas mal realisiert für unsere Umsetzung eines 3270 Clients (nicht MVVM). Nur mit dem TabIndex ging es leider nicht, da man so über alle möglichen Controls hüpft.

Wir haben es dann so gelöst das wir beim Aufbau des Schirmes (Werte übertragen) ein (sortiertes) Dictionary erstellen für TabIndex/Control. Wenn nun Tab gedrückt wurde wir einfach das nächste Control in der Map angesprungen. (bei STRG+Tab das vorherige, und am Ende bzw. Anfang eben wieder von vorne bzw. hinten begonnen)
Wäre natürlich auch bei dir möglich, aber schön finde ich es selbst nicht (aber naja Zeitdruck halt)

Kleiner Hinweis: Was ich bei der Variante mit den TabIndex nicht super finde wäre bei einer Reorganisation der Reihenfolge das ich so viele Zahlen ändern müsste. Praktischer würde ich es finden wenn man einfach das nächste bzw. voherige Control angeben könnte.

16.842 Beiträge seit 2008
vor 8 Jahren

Es gibt noch die TabNavigation-Eigenschaft, die man auf None setzen muss, IIRC.

Palladin007 Themenstarter:in
2.080 Beiträge seit 2012
vor 8 Jahren

Danke für die Antworten und entschuldigt bitte die späte Antwort.

Ich komme aktuell nicht dazu, das auszutesten.
Ich melde mich aber, sobald ich das ausprobiert habe.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

Palladin007 Themenstarter:in
2.080 Beiträge seit 2012
vor 8 Jahren

Hi und Sorry für die späte Antwort

Ich bin jetzt endlich mal dazu gekommen, das auszuprobieren.
Die Property habe ich im Window und betroffenen Control auf None gesetzt. Sie tut, was ich erwartet habe: Tabstob deaktivieren.
Wenn ich aber auf Continue setze und bei jedem einzigen Control IsTabStop auf True setze, dann kann ich über den Index die Reihenfolge kontrollieren, während alles andere übersprungen wird.

Danke für den Tipp, das mache ich so.

Wirklich zufrieden bin ich nicht, aber da muss ich wahrscheinlich wirklich was Eigenes machen.
Pippls Variante wäre eine Überlegung wert, der Aufwand, das umzusetzen, ist aber größer als ich Zeit habe und die Frage, ob das Feature überhaupt gewürdigt wird - ich denke, das lohnt nicht 😄

@Pippl:

Du könntest deine Variante doch hinter AttachedProperties verstecken?
Das Ganze bekommt dann (wie beim RadioButton) Gruppen und jedes Control kann sich für eine Gruppe mit einem Key registrieren.
Irgendwo zentral sortierst Du die Keys dann in der gewünschten Reihenfolge.

Ist bisher nur eine Idee, ob das sich so umsetzen lässt, wie ich mir das vorstelle - ich weiß es nicht 😄

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.