Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Windows Presentation Foundation (WPF) biedt twee parallelle mechanismen voor het wijzigen van de visuele uiterlijk van een controle wanneer het de focus van het toetsenbord krijgt. Het eerste mechanisme is het gebruik van eigenschapssets voor eigenschappen zoals IsKeyboardFocused binnen de stijl of sjabloon die op het besturingselement wordt toegepast. Het tweede mechanisme is het opgeven van een afzonderlijke stijl als de waarde van de eigenschap FocusVisualStyle; de "focus visual style" creëert een aparte visualstructuur voor een versierstructuur die bovenop het besturingselement tekent, in plaats van de visualstructuur van het besturingselement of een ander UI-element te wijzigen door het te vervangen. In dit onderwerp worden de scenario's besproken waarin elk van deze mechanismen geschikt is.
Het doel van de focus-visuele stijl
De focusfunctie voor visuele stijlen biedt een gemeenschappelijk objectmodel voor het introduceren van visuele gebruikersfeedback op basis van toetsenbordnavigatie voor elk UI-element. Dit is mogelijk zonder een nieuwe sjabloon toe te passen op het besturingselement of de specifieke sjabloonsamenstelling te kennen.
Omdat de focusfunctie voor visuele elementen echter werkt zonder de besturingssjablonen te kennen, is de visuele feedback die voor een besturingselement kan worden weergegeven met een visuele focusstijl noodzakelijkerwijs beperkt. Wat de functie in feite doet, is een andere visuele boom (een decorator) boven op de visuele structuur plaatsen, zoals gemaakt door de renderen van een besturingselement via zijn sjabloon. U definieert deze afzonderlijke visuele boom met behulp van een stijl die de FocusVisualStyle-eigenschap instelt.
Standaardgedrag van de visuele stijl met focus
Focusvisualstijlen werken alleen wanneer de focusactie is gestart door het toetsenbord. Als u een muisactie of programmatische focus wijzigt, wordt de modus voor visuele focusstijlen uitgeschakeld. Zie Overzicht van focusvoor meer informatie over het onderscheid tussen focusmodi.
De thema's voor besturingselementen bevatten een standaardgedrag voor visuele focus dat de focusvisualstijl wordt voor alle besturingselementen in het thema. Deze themastijl wordt geïdentificeerd door de waarde van de statische sleutel FocusVisualStyleKey. Wanneer u uw eigen stijl voor de focusvisual op toepassingsniveau declareert, vervangt u dit standaardstijlgedrag van de thema's. Als u het hele thema definieert, moet u dezelfde sleutel gebruiken om de stijl voor het standaardgedrag voor uw hele thema te definiëren.
In de thema's is de standaard visuele focusstijl over het algemeen heel eenvoudig. Hier volgt een ruwe benadering:
<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>
Wanneer focus-visualstijlen gebruiken
Conceptueel moet het uiterlijk van visuele stijlen die op besturingselementen worden toegepast, coherent zijn van controle tot controle. Een manier om coherentie te garanderen, is door de focusvisuele stijl alleen te wijzigen als u een heel thema opstelt. In zo'n thema krijgt elk besturingselement dat daarin is gedefinieerd ofwel precies dezelfde focusvisuele stijl, of een variant van een stijl die visueel samenhangt bij elk besturingselement. U kunt ook dezelfde stijl (of vergelijkbare stijlen) gebruiken om elk toetsenbordfocusselement op een pagina of in een gebruikersinterface aan te passen.
Het instellen van FocusVisualStyle voor afzonderlijke besturingsstijlen die geen deel uitmaken van een thema, is niet het beoogde gebruik van visuele stijlen voor focus. Dit komt doordat een inconsistent visueel gedrag tussen besturingselementen kan leiden tot een verwarrende gebruikerservaring met betrekking tot toetsenbordfocus. Als u controlespecifiek gedrag wilt gebruiken voor toetsenbordfocus die opzettelijk niet coherent zijn in een thema, is het veel beter om triggers te gebruiken in stijlen voor eigenschappen van afzonderlijke invoerstatussen, zoals IsFocused of IsKeyboardFocused.
Focus visualisaties zijn uitsluitend bedoeld voor toetsenbordfocus. Als zodanig zijn visuele stijlen voor focus een type toegankelijkheidsfunctie. Als u wilt dat de gebruikersinterface wordt gewijzigd voor elk type focus, ongeacht of u de muis, het toetsenbord of programmatisch gebruikt, moet u geen visuele stijlen voor de focus gebruiken en in plaats daarvan setters en triggers gebruiken in stijlen of sjablonen die werken vanuit de waarde van algemene focuseigenschappen, zoals IsFocused of IsKeyboardFocusWithin.
Hoe een visuele focusstijl te creëren
De stijl die u maakt voor een visuele focusstijl moet altijd de TargetType van Controlhebben. De stijl moet voornamelijk bestaan uit een ControlTemplate. U geeft het doeltype niet op als het type waarin de stijl van de focusvisual is toegewezen aan de FocusVisualStyle.
Omdat het doeltype altijd Controlis, moet u stijl geven met eigenschappen die gemeenschappelijk zijn voor elk besturingselement (gebruik makend van eigenschappen van de Control-klasse en zijn basisklassen). U moet een sjabloon maken die correct functioneert als een overlay naar een UI-element en die geen functionele gebieden van het besturingselement verdoezelt. Over het algemeen betekent dit dat de visuele feedback buiten de randen van de controle moet worden weergegeven, of als tijdelijke of onopvallende visuele effecten die het registreren van kliks niet blokkeren op de controle met toegepaste focusstijl. Eigenschappen die u kunt gebruiken in sjabloonbindingen die handig zijn voor het bepalen van de grootte en plaatsing van uw overlaysjabloon zijn onder andere ActualHeight, ActualWidth, Marginen Padding.
Alternatieven voor het gebruik van een visuele focusstijl
Voor situaties waarin het gebruik van een visuele focusstijl niet geschikt is, ofwel omdat u slechts één besturingselementen opstelt of omdat u meer controle wilt over de besturingssjabloon, zijn er veel andere toegankelijke eigenschappen en technieken die visueel gedrag kunnen creëren als reactie op wijzigingen in de focus.
Triggers, setters en gebeurtenissetters worden allemaal in detail besproken in Styling en Templating. De verwerking van gerouteerde gebeurtenissen wordt besproken in Overzicht van gerouteerde gebeurtenissen.
IsToetsenbordGeconcentreerd
Als u specifiek geïnteresseerd bent in toetsenbordfocus, kan de eigenschap IsKeyboardFocused afhankelijkheid worden gebruikt voor een eigenschap Trigger. Een eigenschapstrigger in een stijl of sjabloon is een meer geschikte techniek voor het definiëren van een toetsenbordfocusgedrag dat zeer specifiek is voor één besturingselement en die mogelijk niet visueel overeenkomt met het gedrag van de toetsenbordfocus voor andere besturingselementen.
Een andere vergelijkbare afhankelijkheidseigenschap is IsKeyboardFocusWithin, die mogelijk geschikt is om te gebruiken als u visueel wilt benadrukken dat de toetsenbordfocus zich ergens binnen het compositieproces of binnen het functionele gebied van de besturingselement bevindt. U kunt bijvoorbeeld een IsKeyboardFocusWithin trigger plaatsen, zodat een paneel dat verschillende besturingselementen groept, anders wordt weergegeven, ook al is de focus van het toetsenbord mogelijk nauwkeuriger op een afzonderlijk element in dat deelvenster.
U kunt ook de gebeurtenissen GotKeyboardFocus en LostKeyboardFocus (evenals hun preview-equivalenten) gebruiken. U kunt deze gebeurtenissen gebruiken als basis voor een EventSetter, of u kunt handlers schrijven voor de gebeurtenissen in code-behind.
Andere focuseigenschappen
Als u wilt dat alle mogelijke oorzaken van het wijzigen van de focus visueel gedrag produceren, moet u een setter of trigger baseren op de afhankelijkheidseigenschap IsFocused, of op de GotFocus- of LostFocus-gebeurtenissen die voor een EventSetterworden gebruikt.
Zie ook
.NET Desktop feedback