Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Program Windows Presentation Foundation (WPF) udostępnia dwa równoległe mechanizmy zmiany wyglądu wizualizacji kontrolki po odebraniu fokusu klawiatury. Pierwszy mechanizm polega na użyciu setterów dla właściwości, takich jak IsKeyboardFocused w stylu lub szablonie stosowanym do kontrolki. Drugi mechanizm polega na udostępnieniu oddzielnego stylu jako wartości FocusVisualStyle właściwości; "styl wizualizacji fokusu" tworzy oddzielne drzewo wizualne dla modułu adoratora, który korzysta z kontrolki, a nie zmienia drzewa wizualnego kontrolki lub innego elementu interfejsu użytkownika, zastępując go. W tym temacie omówiono scenariusze, w których każdy z tych mechanizmów jest odpowiedni.
Cel stylu wizualizacji fokusu
Funkcja wizualnego stylu fokusu udostępnia wspólny "model obiektowy" umożliwiający wprowadzenie wizualnej odpowiedzi użytkownika na podstawie nawigacji za pomocą klawiatury do dowolnego elementu interfejsu użytkownika. Jest to możliwe bez stosowania nowego szablonu do kontrolki lub znajomości konkretnej kompozycji szablonu.
Jednak właśnie dlatego, że funkcja stylu wizualnego zaznaczenia działa bez znajomości szablonów kontrolek, informacja zwrotna wizualna, którą można wyświetlić dla kontrolki przy użyciu tego stylu, jest siłą rzeczy ograniczona. Funkcja faktycznie polega na nakładaniu innego drzewa wizualnego (elementu ozdobnego) na drzewo wizualne, które zostało utworzone poprzez renderowanie kontrolki według jej szablonu. Definiujesz to oddzielne drzewo wizualne za pomocą stylu, który ustawia właściwość FocusVisualStyle.
Domyślne zachowanie stylu wizualizacji fokusu
Style wizualizacji fokusu działają tylko wtedy, gdy akcja fokusu została zainicjowana przez klawiaturę. Każda akcja myszy lub zmiana fokusu programowego wyłącza tryb stylów wizualizacji fokusu. Aby uzyskać więcej informacji na temat różnic między trybami koncentracji uwagi, zobacz Omówienie fokusu.
Motywy kontrolek obejmują domyślne zachowanie stylu wizualizacji fokusu, które staje się stylem wizualizacji fokusu dla wszystkich kontrolek w motywie. Ten styl motywu jest identyfikowany przez wartość klucza FocusVisualStyleKeystatycznego . W przypadku deklarowania własnego stylu wizualizacji fokusu na poziomie aplikacji należy zastąpić to domyślne zachowanie stylu pochodzące z motywów. Alternatywnie, jeśli zdefiniujesz cały motyw, użyj tego samego klucza, aby zdefiniować styl domyślnego zachowania dla całego motywu.
W motywach domyślny styl wizualizacji fokusu jest zazwyczaj bardzo prosty. Poniżej przedstawiono przybliżone przybliżenie:
<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>
Kiedy używać stylów wizualnych fokusu
Z założenia wygląd wizualnych stylów zaznaczenia zastosowanych do kontrolek powinien być spójny między kontrolkami. Jednym ze sposobów zapewnienia spójności jest zmiana stylu wizualnego fokusu tylko wtedy, gdy komponujesz cały motyw, w którym każda kontrolka zdefiniowana w motywie otrzymuje ten sam styl wizualny fokusu lub jakąś odmianę stylu, który jest wizualnie spójny między kontrolkami. Alternatywnie możesz użyć tego samego stylu (lub podobnych stylów), aby stylizować każdy element z możliwością koncentracji uwagi klawiatury na stronie lub w interfejsie użytkownika.
Ustawienie FocusVisualStyle dla poszczególnych stylów kontrolek, które nie są częścią motywu, nie jest zamierzonym użyciem stylów wizualizacji fokusu. Dzieje się tak, ponieważ niespójne zachowanie wizualne między kontrolkami może prowadzić do mylącego doświadczenia użytkownika dotyczącego fokusu klawiatury. Jeśli zamierzasz używać zachowań specyficznych dla kontrolek dla fokusu klawiatury, które celowo nie są spójne w obrębie motywu, znacznie lepszym podejściem jest użycie wyzwalaczy w stylach dla poszczególnych właściwości stanu danych wejściowych, takich jak IsFocused lub IsKeyboardFocused.
Style wizualizacji fokusu działają wyłącznie dla fokusu klawiatury. W związku z tym style uwidocznienia fokusu są rodzajem funkcji ułatwień dostępu. Jeśli chcesz zmienić interfejs użytkownika dla dowolnego typu fokusu, czy za pomocą myszy, klawiatury lub programowo, nie należy używać stylów wizualizacji fokusu i zamiast tego należy używać ustawiaczy i wyzwalaczy w stylach lub szablonach, które działają na podstawie wartości ogólnych właściwości fokusu, takich jak IsFocused lub IsKeyboardFocusWithin.
Jak utworzyć styl wizualizacji fokusu
Styl wizualny, który tworzysz dla fokusu, powinien zawsze mieć TargetTypeControl. Styl powinien składać się głównie z ControlTemplate. Nie określasz typu docelowego, który ma być typem, w którym styl wizualizacji fokusu jest przypisany do elementu FocusVisualStyle.
Ponieważ typ docelowy jest zawsze Control, należy stylizować przy użyciu właściwości, które są wspólne dla wszystkich kontrolek (korzystając z właściwości klasy Control i jej bazowych klas). Należy utworzyć szablon, który będzie działał prawidłowo jako nakładka elementu interfejsu użytkownika i który nie będzie ukrywać obszarów funkcjonalnych kontrolki. Ogólnie rzecz biorąc, oznacza to, że informacje zwrotne wizualne powinny pojawiać się poza marginesami sterowania lub jako tymczasowe lub nieinwazyjne efekty, które nie będą blokować testowania trafności w kontrolce, w której zastosowano styl wizualizacji fokusu. Właściwości, których można użyć w powiązaniu szablonu, które są przydatne do określania rozmiaru i pozycjonowania szablonu nakładki, obejmują ActualHeight, ActualWidth, Margini Padding.
Alternatywy dla używania stylu wizualnego koncentracji uwagi
W sytuacjach, w których używanie stylu wizualizacji fokusu nie jest odpowiednie, ponieważ używasz tylko pojedynczych kontrolek lub chcesz mieć większą kontrolę nad szablonem kontrolki, istnieje wiele innych dostępnych właściwości i technik, które mogą tworzyć zachowanie wizualne w odpowiedzi na zmiany fokusu.
Wyzwalacze, zestawy i zestawy zdarzeń zostały szczegółowo omówione w temacie Styling and Templating (Styleing and Templating). Obsługa zdarzeń trasowanych jest omawiana w temacie Routed Events Overview (Omówienie zdarzeń trasowanych).
CzyKlawiaturaJestSkupiona
Jeśli interesuje Cię fokus klawiatury, IsKeyboardFocused właściwość zależności może być używana dla właściwości Trigger. Wyzwalacz właściwości w stylu lub szablonie jest bardziej odpowiednią techniką definiowania zachowania fokusu klawiatury, która jest bardzo specyficzna dla pojedynczej kontrolki i która może nie być wizualnie zgodna z zachowaniem fokusu klawiatury dla innych kontrolek.
Inną podobną właściwością zależności jest IsKeyboardFocusWithin, która może być odpowiednia do użycia, jeśli chcesz wizualnie zaznaczyć, że fokus klawiatury znajduje się gdzieś w kompozycji lub w obszarze funkcjonalnym kontrolki. Na przykład można umieścić IsKeyboardFocusWithin wyzwalacz tak, aby panel, który grupuje kilka kontrolek, wyglądał inaczej, mimo że fokus klawiatury może być bardziej precyzyjny dla pojedynczego elementu w tym panelu.
Możesz również użyć zdarzeń GotKeyboardFocus i LostKeyboardFocus (a także ich odpowiedników w wersji zapoznawczej). Tych zdarzeń można użyć jako podstawy dla EventSetter, lub można pisać procedury obsługi zdarzeń w kodzie.
Inne właściwości fokusu
Jeśli chcesz, aby zmiana fokusu powodowała zachowanie wizualne, powinieneś oprzeć się na właściwości ustalającej lub wyzwalającej dla IsFocused właściwości zależności albo alternatywnie na GotFocus lub LostFocus wydarzeniach używanych do elementu EventSetter.
Zobacz także
- FocusVisualStyle
- Stylizowanie i Tworzenie Szablonów
- Omówienie fokusu
- Omówienie danych wejściowych
.NET Desktop feedback