středa 7. května 2014

WPF - KeyboardNavigation - Navigace pomocí kláves v ItemsControl nebo v jiném 'kontejnéru'

Jako uživatel windows aplikací se řadím spíše mezi takzvané klikače, proto mi velice často unikají ve vývoji potřeby příznivců tzv. klávesovačů - čili uživatelů vyplňujících okna pomocí klávesnice a klávesových zkratek. Takže tyto detajly musím dolaďovat jako vývojář v závěrečné fázi před nasazením.




Pokud si okno skládáte ručně, tak si zpravidla vystačíte s nastavováním TabIndexů, které určí pořadí editace při stisknutí klávesy Tab. Jelikož mám editor postavený dynamicky přes ItemsControl, tak jsem TabIndex nevyužil. Klávesou Tab naviguji z jedné položky ItemsControl na druhou.

Celkem zajímavá je ale možnost ale ovlivnit možnost navigace klávesnící ItemsControl, připadně v jiném kontejnéru.

Navigaci klávesnící ovlivním snadno přes třídu - KeyboardNavigation.
V MSDN si o tom můžete přečíst ZDE.

Navigaci přes Tabulátor ovlivníte  - KeyboardNavigation.TabNavigation
Směrovou navigaci přes šipky ovlivníte  - KeyboardNavigation.DirectionalNavigation

A možnosti jsou následující: Contained, Continue, Cycle, Local, None, Once

Nejlépe je si chování vyzkoušet na příkladu:

<GroupBox Header="Check Boxes" KeyboardNavigation.TabNavigation="Once"
                  Height="126" HorizontalAlignment="Left" 
                  VerticalAlignment="Top" Width="200">
            <StackPanel Margin="8">
                <CheckBox Content="Check Box 1"/>
                <CheckBox Content="Check Box 2"/>
                <CheckBox Content="Check Box 3"/>
                <CheckBox Content="Check Box 4"/>
                <CheckBox Content="Check Box 5"/>
            </StackPanel>
        </GroupBox>
        
        <GroupBox x:Name="gbRadio" Header="Radio Buttons" Height="126" VerticalAlignment="Top" Margin="206,0,107,0">
            <StackPanel Margin="8">
                <RadioButton x:Name="radio1" Content="Radio Button 1"/>
                <RadioButton Content="Radio Button 2"/>
                <RadioButton Content="Radio Button 3"/>
                <RadioButton Content="Radio Button 4"/>
                <RadioButton Content="Radio Button 5"/>
            </StackPanel>
        </GroupBox>

A přitom taková blbost, ale potěší :).

Žádné komentáře: