Fokusstile in Steuerelementen und FocusVisualStyle
Aktualisiert: November 2007
Windows Presentation Foundation (WPF) stellt zwei parallele Mechanismen zum Ändern der Darstellung eines Steuerelements bereit, wenn es den Tastaturfokus erhält. Der erste Mechanismus besteht in der Verwendung von Eigenschaftensettern für Eigenschaften wie IsKeyboardFocused innerhalb des Stils oder der Vorlage, der bzw. die auf das Steuerelement angewendet wird. Der zweite Mechanismus besteht in der Bereitstellung eines gesonderten Stils als Wert für die Eigenschaft FocusVisualStyle; der "visuelle Fokusstil" erstellt eine gesonderte visuelle Struktur für einen Adorner, der dem Steuerelement überlagert wird, anstatt die visuelle Struktur des Steuerelements oder eines anderen UI-Elements durch Ersetzen zu ändern. In diesem Thema werden die Szenarien erläutert, für die die jeweiligen Mechanismen geeignet sind.
Dieses Thema enthält folgende Abschnitte.
- Zweck des visuellen Fokusstils
- Standardverhalten des visuellen Fokusstils
- Verwendung von visuellen Fokusstilen
- Erstellen eines visuellen Fokusstils
- Alternativen zur Verwendung eines visuellen Fokusstils
- Verwandte Abschnitte
Zweck des visuellen Fokusstils
Das Feature des visuellen Fokusstils stellt ein gemeinsames "Objektmodell" bereit, mit dem ein visuelles Benutzerfeedback auf der Basis der Tastaturnavigation zu einem beliebigen UI-Element eingeführt wird. Dazu muss keine neue Vorlage für das Steuerelement übernommen werden bzw. die spezifische Vorlagenzusammensetzung muss nicht bekannt sein.
Da jedoch das Feature des visuellen Fokusstils eben ohne Kenntnis der Steuerungsvorlagen funktioniert, ist das visuelle Feedback, das für ein Steuerelement unter Verwendung eines visuellen Fokusstils angezeigt werden kann, beschränkt. Das Feature überlagert die visuelle Struktur nämlich einfach durch eine andere visuelle Struktur (einen Adorner), die durch das Rendern eines Steuerelements über seine Vorlage erstellt wird. Diese gesonderte visuelle Struktur wird mit einem Stil definiert, der die FocusVisualStyle-Eigenschaft ausfüllt.
Standardverhalten des visuellen Fokusstils
Visuelle Fokusstile werden nur dann wirksam, wenn die Fokusaktion über die Tastatur initiiert wurde. Durch eine Mausaktion oder eine programmgesteuerte Fokusänderung wird der Modus für visuelle Fokusstile deaktiviert. Weitere Informationen über die Unterschiede zwischen Fokusmodi finden Sie unter Fokus - Übersicht.
Die Designs für Steuerelemente umfassen ein Standardverhalten für den visuellen Fokusstil, das zum visuellen Fokusstil für alle Steuerelemente in diesem Design wird. Dieser Designstil wird durch den Wert des statischen Schlüssels FocusVisualStyleKey festgelegt. Wenn Sie einen eigenen visuellen Fokusstil auf Anwendungsebene deklarieren, ersetzen Sie das Standardverhalten des Stils in den Designs. Wenn Sie das gesamte Design definieren, sollten Sie diesen Schlüssel auch verwenden, um den Stil für das Standardverhalten des gesamten Designs zu definieren.
In den Designs ist der Standardstil für den visuellen Fokus im Allgemeinen sehr einfach. Im Folgenden finden Sie eine grobe Übersicht:
<Style x:Key="{x:Static SystemParameters.FocusVisualStyleKey}">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Rectangle StrokeThickness="1"
Stroke="Black"
StrokeDashArray="1 2"
SnapsToDevicePixels="true"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Verwendung von visuellen Fokusstilen
Im Prinzip sollte die Darstellung der visuellen Fokusstile, die für die Steuerelemente übernommen werden, einheitlich sein. Eine Möglichkeit zur Sicherstellung einer solchen einheitlichen Darstellung besteht darin, den visuellen Fokusstil nur dann zu ändern, wenn Sie ein vollständiges Design erstellen, in dem für jedes definierte Steuerelement, das in dem Design definiert wird, derselbe visuelle Fokusstil oder eine Variation eines Stils festgelegt wird, der für die einzelnen Steuerelement ähnlich ist. Sie können auch denselben Stil (oder ähnliche Stile) zur Formatierung aller Elemente auf einer Seite oder in einer Benutzeroberfläche verwenden, die den Tastaturfokus erhalten können.
Das Festlegen von FocusVisualStyle für einzelne Steuerelementstile, die nicht Teil eines Designs sind, wird als Verwendung des visuellen Fokusstils nicht empfohlen. Dies könnte zu einer verwirrenden Gestaltung der Benutzeroberfläche hinsichtlich des Tastaturfokus führen. Wenn Sie steuerelementspezifische Verhaltensweisen für den Tastaturfokus festlegen möchten, die designübergreifend explizit nicht kohärent sind, stellt das Verwenden von Triggern in Stilen für einzelne Eingabezustandseigenschaften ein wesentlich besser geeignetes Verfahren dar, z. B. das Verwenden von IsFocused oder IsKeyboardFocused.
Visuelle Fokusstile sind ausschließlich für den Tastaturfokus wirksam. Visuelle Fokusstile sind im Grunde genommen eine Art Eingabehilfe. Wenn Sie eine Änderung der Benutzeroberfläche für jeden Typ von Fokus erreichen möchten, ob über Mausklick, Tastatureingabe oder programmgesteuert, sollten Sie keine visuellen Fokusstile verwenden, sondern stattdessen Setter und Trigger in Stilen oder Vorlagen einsetzen, die auf der Basis des Werts allgemeiner Fokuseigenschaften arbeiten, z. B. IsFocused oder IsFocusWithin.
Erstellen eines visuellen Fokusstils
Der Stil, den Sie für einen visuellen Fokusstil erstellen, sollte immer den TargetType von Control aufweisen. Der Stil sollte hauptsächlich aus einer ControlTemplate bestehen. Sie geben den Zieltyp nicht als den Typ an, bei dem der visuelle Fokusstil dem FocusVisualStyle zugewiesen ist.
Da der Zieltyp immer Control ist, müssen Sie zum Erstellen des Stils Eigenschaften verwenden, die allen Steuerelementen gemeinsam sind (unter Verwendung von Eigenschaften der Control-Klasse und ihrer Basisklassen). Sie sollten eine Vorlage erstellen, die ordnungsgemäß als Overlay für ein UI-Element arbeitet und keine funktionalen Bereiche des Steuerelements verdeckt. Im Allgemeinen bedeutet das, dass das visuelle Feedback außerhalb der Ränder eines Steuerelements oder als temporärer oder unaufdringlicher Effekt dargestellt werden sollte, sodass der Treffertest für das Steuerelement bei übernommenem visuellem Fokusstil nicht blockiert wird. Zu den Eigenschaften, die Sie bei der Vorlagenbindung verwenden können und die nützlich für das Festlegen der Größe und Position der Overlayvorlage sind, gehören ActualHeight, ActualWidth, Margin und Padding.
Alternativen zur Verwendung eines visuellen Fokusstils
In Situationen, in denen die Verwendung eines visuellen Fokusstils nicht angemessen ist, weil Sie beispielsweise einzelne Steuerelemente formatieren oder die Steuerelementvorlage noch weitreichender steuern möchten, stehen viele andere Eigenschaften und Techniken zur Verfügung, mit denen Sie ein visuelles Verhalten als Reaktion auf eine Fokusänderung erstellen können.
Trigger, Setter und Ereignissetter werden ausführlich unter Erstellen von Formaten und Vorlagen erläutert. Die Routingereignisbehandlung wird unter Übersicht über Routingereignisse erläutert.
IsKeyboardFocused
Wenn Sie besonders am Tastaturfokus interessiert sind, kann die IsKeyboardFocused-Abhängigkeitseigenschaft für einen Eigenschaften-Trigger verwendet werden. Ein Eigenschaftentrigger in einem Stil oder einer Vorlage ist eine gut geeignete Technik, um ein Tastaturfokusverhalten zu definieren, das ganz speziell für ein einziges Steuerelement gilt und das visuell nicht dem Tastatusfokusverhalten anderer Steuerelemente entspricht.
Eine weitere ähnliche Abhängigkeitseigenschaft ist IsKeyboardFocusWithin, die verwendet werden kann, wenn Sie visuell hervorheben möchten, dass sich der Tastaturfokus an einer Position innerhalb der Zusammensetzung oder innerhalb des funktionalen Bereichs des Steuerelements befindet. Sie können beispielsweise einen IsKeyboardFocusWithin-Trigger so platzieren, dass ein Bereich, in dem mehrere Steuerelemente gruppiert sind, anders dargestellt wird, auch wenn der Tastaturfokus auf genau einem der einzelnen Elemente innerhalb dieses Bereichs liegt.
Sie können auch die Ereignisse GotKeyboardFocus und LostKeyboardFocus (sowie ihre Vorschauentsprechungen) verwenden. Sie können diese Ereignisse als Basis für einen EventSetter verwenden, oder Sie können Handler für diese Ereignisse in Code-Behind schreiben.
Andere Fokuseigenschaften
Wenn Sie ein bestimmtes visuelles Verhalten bei allen möglichen Fokusänderungen erzeugen möchten, sollten Sie einen Setter oder Trigger auf der Basis der IsFocused-Abhängigkeitseigenschaft oder alternativ auf der Basis des GotFocus-Ereignisses oder des LostFocus-Ereignisses erstellen, die für einen EventSetter verwendet werden.
Siehe auch
Konzepte
Erstellen von Formaten und Vorlagen