Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Windows Presentation Foundation (WPF) innehåller två parallella mekanismer för att ändra det visuella utseendet på en kontroll när den får tangentbordsfokus. Den första mekanismen är att använda egenskapsuppsättningar för egenskaper som IsKeyboardFocused i formatet eller mallen som tillämpas på kontrollen. Den andra mekanismen är att ange ett separat format som värdet för egenskapen FocusVisualStyle. det visuella fokusformatet skapar ett separat visuellt träd för en utsmyckning som bygger på kontrollen, i stället för att ändra kontrollens eller andra gränssnittselements visuella träd genom att ersätta det. I det här avsnittet beskrivs scenarier där var och en av dessa mekanismer är lämpliga.
Syftet med visuell fokusstil
Funktionen visuellt fokusformat ger en vanlig "objektmodell" för att introducera visuell användarfeedback baserat på tangentbordsnavigering till valfritt gränssnittselement. Detta är möjligt utan att tillämpa en ny mall på kontrollen eller känna till den specifika mallsammansättningen.
Men just eftersom funktionen för visuellt fokusformat fungerar utan att känna till kontrollmallarna är den visuella feedback som kan visas för en kontroll med hjälp av ett visuellt fokusformat nödvändigtvis begränsad. Vad funktionen faktiskt innebär är att lägga ett annat visuellt träd (en dekoration) ovanpå det visuella trädet som skapats genom en kontrolls återgivning via dess mall. Du definierar det här separata visuella trädet med en stil som fyller FocusVisualStyle-egenskapen.
Standardbeteende för visuellt fokusformat
Visuella fokusformat fungerar bara när fokusåtgärden initierades av tangentbordet. Alla musåtgärder eller programmatiska fokusändringar inaktiverar läget för visuella fokusformat. Mer information om skillnaderna mellan fokuslägen finns i Översikt över fokus.
Teman för kontroller innehåller ett standardbeteende för visuellt fokusformat som blir det visuella fokusformatet för alla kontroller i temat. Det här temaformatet identifieras av värdet för den statiska nyckeln FocusVisualStyleKey. När du deklarerar ditt eget visuella fokusformat på programnivå ersätter du det här standardstilbeteendet från temana. Om du definierar hela temat bör du också använda samma nyckel för att definiera formatmallen för standardbeteendet för hela temat.
I teman är den visuella standardstilen för fokus i allmänhet mycket enkel. Följande är en ungefärlig uppskattning:
<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>
När du ska använda visuella fokusformat
Konceptuellt bör utseendet på visuella fokusformat som tillämpas på kontroller vara sammanhängande från kontroll till kontroll. Ett sätt att säkerställa enhetlighet är att bara ändra det visuella fokusformatet om du skapar ett helt tema, där varje kontroll som definieras i temat får samma visuella fokusformat eller någon variant av ett format som är visuellt relaterat från kontroll till kontroll. Du kan också använda samma formatmall (eller liknande format) för att formatera varje tangentbordsfokuserbart element på en sida eller i ett användargränssnitt.
Att ange FocusVisualStyle på enskilda kontrollformat som inte ingår i ett tema är inte den avsedda användningen av visuella fokusformat. Detta beror på att ett inkonsekvent visuellt beteende mellan kontroller kan leda till en förvirrande användarupplevelse när det gäller tangentbordsfokus. Om du har för avsikt att styra specifika beteenden för tangentbordsfokus som medvetet inte är sammanhängande med ett tema, är en mycket bättre metod att använda utlösare i formatmallar för enskilda egenskaper för indatatillstånd, till exempel IsFocused eller IsKeyboardFocused.
Visuella fokusformat fungerar uteslutande för tangentbordsfokus. Därför är visuella fokusformat en typ av hjälpmedelsfunktion. Om du vill ha ändringar i användargränssnittet för alla typer av fokus, oavsett om det är via mus, tangentbord eller programmatiskt, bör du inte använda visuella fokusformat och i stället använda setters och utlösare i format eller mallar som fungerar från värdet för allmänna fokusegenskaper som IsFocused eller IsKeyboardFocusWithin.
Så här skapar du en visuell fokusstil
Den stil du skapar för en visuell fokusstil bör alltid ha TargetType för Control. Stilen bör huvudsakligen bestå av en ControlTemplate. Du anger inte måltypen som den typ där det visuella fokusformatet tilldelas till FocusVisualStyle.
Eftersom måltypen alltid är Controlmåste du formatera med hjälp av egenskaper som är gemensamma för alla kontroller (med hjälp av egenskaperna för klassen Control och dess basklasser). Du bör skapa en mall som fungerar korrekt som ett överlägg till ett gränssnittselement och som inte döljer funktionsområdena i kontrollen. I allmänhet innebär det att den visuella feedbacken ska visas utanför kontrollmarginalerna, eller som tillfälliga eller diskreta effekter som inte blockerar träfftestningen på kontrollen där det visuella fokusformatet används. Egenskaper som du kan använda i mallbindning som är användbara för att bestämma storlek och placering av överläggsmallen är ActualHeight, ActualWidth, Marginoch Padding.
Alternativ till att ha en fokusvisuell stil
För situationer där det inte är lämpligt att använda ett visuellt fokusformat, antingen för att du bara utformar enskilda kontroller eller för att du vill ha större kontroll över kontrollmallen, finns det många andra tillgängliga egenskaper och tekniker som kan skapa visuellt beteende som svar på ändringar i fokus.
Utlösare, sättare och händelsesättare beskrivs i detalj i Styling och Templating. Hantering av routade händelser beskrivs i Översikt över routade händelser.
ÄrTangentbordFokuserat
Om du är särskilt intresserad av tangentbordsfokus kan beroendeegenskapen IsKeyboardFocused användas för egenskapen Trigger. En egenskapsutlösare i antingen ett format eller en mall är en lämpligare teknik för att definiera ett tangentbordsfokusbeteende som är mycket specifikt för en enda kontroll, och som kanske inte visuellt matchar tangentbordsfokusbeteendet för andra kontroller.
En annan liknande beroendeegenskap är IsKeyboardFocusWithin, vilket kan vara lämpligt att använda om du visuellt vill framhäva att tangentbordsfokus ligger någonstans inom sammansättning eller inom kontrollens funktionella område. Du kan till exempel placera en IsKeyboardFocusWithin utlösare så att en panel som grupperar flera kontroller ser annorlunda ut, även om tangentbordsfokus kan vara mer exakt på ett enskilt element i panelen.
Du kan också använda händelserna GotKeyboardFocus och LostKeyboardFocus (samt motsvarande förhandsversioner). Du kan använda dessa händelser som grund för en EventSetter, eller så kan du skriva hanterare för händelserna i code-behind.
Andra fokusegenskaper
Om du vill att alla möjliga orsaker att ändra fokus ska skapa ett visuellt beteende, bör du basera en setter eller trigger på IsFocused-beroendeegenskapen, eller alternativt på GotFocus- eller LostFocus-händelserna som används för en EventSetter.
Se även
- FocusVisualStyle
- Styling och Mallhantering
- Översikt över fokus
- Översikt av indata
.NET Desktop feedback