Frage

WPF Itemscontrol wird ein Fokus-Rechteck angezeigt wird, wenn sie denkt, dass es den Fokus hat und der Benutzer drückt Tab oder Alt.

Aber ich hatte vor kurzem ein Item ein Fokus-Rechteck angezeigt werden, obwohl es nicht Fokus hatte - einer seiner Eltern. Die Items innerhalb eines Usercontrol war, die in einem anderen Usercontrol war, dass haben haben Fokus. So etwas wie folgt aus:

<!-- UserControl1.xaml; this is the control that has focus -->
<UserControl x:Class="UserControl1" Focusable="True" ...>
    <UserControl2/>
</UserControl>

<!-- UserControl2.xaml -->
<UserControl x:Class="UserControl2">
    <ItemsControl .../>
</UserControl>

Oder die Verschachtelung zu zeigen, optisch:

+---------------------------------------------------+
| UserControl1 (has focus)                          |
|                                                   |
| +-----------------------------------------------+ |
| | UserControl2                                  | |
| |                                               | |
| | +-------------------------------------------+ | |
| | | ItemsControl (shows focus rectangle)      | | |

Es dauerte eine Weile, (und eine Frage Stackoverflow ) auf Figur heraus, wo das Fokus-Rechteck herkam, weil ich nie eine Kontrolle erwartet, die nicht den Fokus haben ein Fokus-Rechteck zu zeigen.

Ich lerne immer noch meinen Weg um WPF, und natürlich weiß ich noch nicht genug, oder dies habe mich nicht verwirrt. Zwei Fragen, mir zu helfen zu verstehen:

  1. Warum Items ein Fokus-Rechteck nicht angezeigt wird, wenn es tatsächlich Fokus nicht hat, sondern einer ihrer Mutter Kontrollen tut? Was ist der Grund für diese Funktion? (Ich bin sicher, es gibt eine - vielleicht etwas mit Vorlagen oder visuellen Bäumen zu tun - ich doch nur nicht tief genug Verständnis für WPF Mechanik und Philosophie habe.)
  2. Wie funktionierts? Was ist der Mechanismus Item verwendet, um zu entscheiden, dass es ein Fokus-Rechteck angezeigt werden sollte?
War es hilfreich?

Lösung

Sind Sie sicher, dass die Items des Fokus nicht besitzen? Wenn es einen Fokus rect zeichnen, sollte es. Nur weil eine Kontrolle höher in der visuellen Struktur fokussiert ist, bedeutet nicht, dass eines seiner Kinder nicht auch konzentriert. Um zu verstehen, warum, stellen Sie sicher, dass Sie den Unterschied zwischen „den logischen Fokus“ gelernt hat und „Tastaturfokus“ in WPF. Es gibt eine exaustive Erklärung auf MSDN.

Andere Tipps

Ich denke, dies ist konstruktionsbedingt. Mein Verständnis ist, dass der Fokus von der übergeordneten Steuerung vererbt wird und bahnt sich seinen Weg durch den visuellen Struktur. Versuchen Sie, den visuellen Stil des Items Eltern untersuchen und dann die Items selbst zu sehen, was mit der visuellen Struktur der XAML vor sich geht. Das sollte einige Hinweise zeigen, was geschieht. Sie können auch versuchen, eine Google-Suche und einige andere Websites für Informationen über Fokus und Items usw. Es kann einige andere Informationen dort aus sein, die weitere Details, wie dass alle Arbeiten gibt, die klarer als, wie ich es erklären kann. Was passiert, wenn Sie die Items klicken und dann woanders klicken und dann das übergeordnete klicken? Jede Änderung im Fokus? Sie können auch versuchen, eine benutzerdefinierte Klasse zu machen, das den Fokus hat Vorrang vor und machen es so die Kontrolle doesnt zeigt die gleiche Art und Weise konzentrieren. Sollte sein (ziemlich) einfach zu tun. auf, dass es möglicherweise Informationen über bestimmte Websites / Blogs sein.

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