Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Hlavní obrázek klávesnice Surface
Urychlovače klávesnice (nebo klávesové zkratky) jsou klávesové zkratky, které zlepšují použitelnost a přístupnost aplikací pro Windows tím, že uživatelům poskytují intuitivní způsob, jak vyvolat běžné akce nebo příkazy bez navigace v uživatelském rozhraní aplikace.
Poznámka:
Klávesnice je nezbytná pro uživatele s určitým postižením (viz přístupnost pomocí klávesnice) a je také důležitým nástrojem pro uživatele, kteří ho dávají přednost jako efektivnější způsob interakce s aplikací.
Podrobnosti o navigaci v uživatelském rozhraní aplikace pro Windows pomocí klávesových zkratek najdete v tématu Access.
Pokud chcete vytvořit vlastní klávesové zkratky, přečtěte si téma Události klávesnice .
Přehled
Akcelerátory se skládají ze dvou typů klíčů: modifikátorů a nemodifikátorů. Modifikační klávesy zahrnují klávesy Shift, Menu, Control a Windows, které jsou zpřístupněny prostřednictvím VirtualKeyModifiers. Mezi nemodifikátory patří libovolný virtuální klíč, například Delete, F3, mezerník, šipka, Esc a všechny alfanumerické a interpunkční klávesy.
Poznámka:
Akcelerátory obvykle zahrnují funkční klávesy F1 až F12 nebo některé kombinace standardní klávesy spárované s jednou nebo více modifikačními klávesami (CTRL, Shift). Pokud například uživatel stiskne kombinaci kláves Ctrl+Shift+M, architektura zkontroluje modifikátory (Ctrl a Shift) a aktivuje akcelerátor, pokud existuje.
Mnoho ovládacích prvků XAML má integrované akcelerátory klávesnice. ListView například podporuje Ctrl+A pro výběr všech položek v seznamu a RichEditBox podporuje Ctrl+Tab pro vložení tabulátoru do textového pole. Tyto předdefinované akcelerátory klávesnice se označují jako řídicí akcelerátory a spouští se pouze v případě, že je fokus na prvku nebo na jednom z podřízených prvků. Akcelerátory definované pomocí rozhraní API akcelerátoru klávesnice, které jsou zde popsány, se označují jako akcelerátory aplikací.
Akcelerátory klávesnice nejsou k dispozici pro každou akci, ale často se přidružují k příkazům vystaveným v nabídkách (a měly by být zadány s obsahem položky nabídky). Akcelerátory lze také přidružit k akcím, které nemají ekvivalentní položky nabídky. Vzhledem k tomu, že uživatelé spoléhají na nabídky aplikace, abyste zjistili dostupnou sadu příkazů a naučili se ji, měli byste zkusit zjistit akcelerátory co nejsnadněji (použití popisků nebo zavedených vzorů vám s tím může pomoct).
Akcelerátor se automaticky opakuje (například když uživatel stiskne kombinaci kláves Ctrl+Shift a pak podrží klávesu M, bude akcelerátor vyvoláván opakovaně, dokud není klávesa M uvolněna). Toto chování nelze změnit.
Klávesové zkratky uvedené v názvu položky nabídky
Kdy používat akcelerátory klávesnice
Doporučujeme zadat akcelerátory klávesnice všude, kde je to vhodné v uživatelském rozhraní, a podporovat akcelerátory ve všech vlastních ovládacích prvcích.
Akcelerátory klávesnice usnadňují přístup k aplikaci uživatelům s motorovým postižením, včetně uživatelů, kteří můžou stisknout jenom jednu klávesu najednou nebo mají potíže s používáním myši.
Dobře navržené uživatelské rozhraní klávesnice je důležitým aspektem přístupnosti softwaru. Umožňuje uživatelům s vadami zraku nebo s určitým motorickým postižením procházet aplikaci a pracovat s jejími funkcemi. Tito uživatelé možná nebudou moct pracovat s myší a místo toho spoléhají na různé technologie usnadnění, jako jsou nástroje pro vylepšení klávesnice, klávesnice na obrazovce, zvětšovače obrazovky, čtečky obrazovky a nástroje pro hlasový vstup. Pro tyto uživatele je zásadní komplexní pokrytí příkazů.
Klávesové zkratky usnadňují používání aplikace pro pokročilé uživatele, kteří dávají přednost interakci pomocí klávesnice.
Zkušení uživatelé často mají silnou předvolbu pro používání klávesnice, protože příkazy založené na klávesnici je možné zadat rychleji a nevyžadují, aby si odebrali ruce z klávesnice. Pro tyto uživatele je zásadní efektivita a konzistence; komplexnost je důležitá jenom pro nejčastěji používané příkazy.
Zadání akcelerátoru klávesnice
Pomocí rozhraní API KeyboardAccelerator můžete vytvářet akcelerátory klávesnice v aplikacích pro Windows. U těchto rozhraní API nemusíte zpracovávat více událostí KeyDownu, abyste zjistili stisknutou kombinaci kláves a v prostředcích aplikace můžete lokalizovat akcelerátory.
Doporučujeme nastavit akcelerátory klávesnice pro nejběžnější akce v aplikaci a dokumentovat je pomocí popisku nabídky nebo popisku nástroje. V tomto příkladu deklarujeme akcelerátory klávesnice pouze pro příkazy Přejmenovat a Kopírovat.
<CommandBar Margin="0,200" AccessKey="M">
<AppBarButton
Icon="Share"
Label="Share"
Click="OnShare"
AccessKey="S" />
<AppBarButton
Icon="Copy"
Label="Copy"
ToolTipService.ToolTip="Copy (Ctrl+C)"
Click="OnCopy"
AccessKey="C">
<AppBarButton.KeyboardAccelerators>
<KeyboardAccelerator
Modifiers="Control"
Key="C" />
</AppBarButton.KeyboardAccelerators>
</AppBarButton>
<AppBarButton
Icon="Delete"
Label="Delete"
Click="OnDelete"
AccessKey="D" />
<AppBarSeparator/>
<AppBarButton
Icon="Rename"
Label="Rename"
ToolTipService.ToolTip="Rename (F2)"
Click="OnRename"
AccessKey="R">
<AppBarButton.KeyboardAccelerators>
<KeyboardAccelerator
Modifiers="None" Key="F2" />
</AppBarButton.KeyboardAccelerators>
</AppBarButton>
<AppBarButton
Icon="SelectAll"
Label="Select"
Click="OnSelect"
AccessKey="A" />
<CommandBar.SecondaryCommands>
<AppBarButton
Icon="OpenWith"
Label="Sources"
AccessKey="S">
<AppBarButton.Flyout>
<MenuFlyout>
<ToggleMenuFlyoutItem Text="OneDrive" />
<ToggleMenuFlyoutItem Text="Contacts" />
<ToggleMenuFlyoutItem Text="Photos"/>
<ToggleMenuFlyoutItem Text="Videos"/>
</MenuFlyout>
</AppBarButton.Flyout>
</AppBarButton>
<AppBarToggleButton
Icon="Save"
Label="Auto Save"
IsChecked="True"
AccessKey="A"/>
</CommandBar.SecondaryCommands>
</CommandBar>
Akcelerátor klávesnice popsaný v popisu
Objekt UIElement má kolekci KeyboardAccelerator, KeyboardAccelerators, kde zadáte vlastní objekty KeyboardAccelerator a definujete stisknutí kláves pro akcelerátor klávesnice:
Klávesa – virtuální klíč používaný pro akcelerátor klávesnice.
Modifikátory – VirtualKeyModifiers používané pro akcelerátor klávesnice. Pokud modifikátory nejsou nastaveny, výchozí hodnota je None.
Poznámka:
Podporují se akcelerátory s jedním stisknutím kláves (A, Delete, F2, mezerník, Esc, multimediální klávesa) a akcelerátory s více klávesami (Ctrl+Shift+M). Virtuální klíče Gamepadu se ale nepodporují.
Akcelerátory s vymezeným oborem
Některé akcelerátory fungují jenom v konkrétních oborech, zatímco jiné fungují v celé aplikaci.
Například Microsoft Outlook zahrnuje následující akcelerátory:
- Ctrl+B, Ctrl+I a ESC fungují jenom v rozsahu e-mailového formuláře pro odesílání
- Ctrl+1 a Ctrl+2 funguje v celé aplikaci
Místní nabídky
Akce místní nabídky ovlivňují pouze určité oblasti nebo prvky, například vybrané znaky v textovém editoru nebo skladbu v seznamu stop. Z tohoto důvodu doporučujeme nastavit obor akcelerátorů klávesnice pro položky místní nabídky na nadřazenou položku místní nabídky.
K určení rozsahu akcelerátoru klávesnice použijte vlastnost ScopeOwner . Tento kód ukazuje, jak implementovat místní nabídku v ListView s vymezenými akcelerátory klávesnice:
<ListView x:Name="MyList">
<ListView.ContextFlyout>
<MenuFlyout>
<MenuFlyoutItem Text="Share" Icon="Share"/>
<MenuFlyoutItem Text="Copy" Icon="Copy">
<MenuFlyoutItem.KeyboardAccelerators>
<KeyboardAccelerator
Modifiers="Control"
Key="C"
ScopeOwner="{x:Bind MyList }" />
</MenuFlyoutItem.KeyboardAccelerators>
</MenuFlyoutItem>
<MenuFlyoutItem Text="Delete" Icon="Delete" />
<MenuFlyoutSeparator />
<MenuFlyoutItem Text="Rename">
<MenuFlyoutItem.KeyboardAccelerators>
<KeyboardAccelerator
Modifiers="None"
Key="F2"
ScopeOwner="{x:Bind MyList}" />
</MenuFlyoutItem.KeyboardAccelerators>
</MenuFlyoutItem>
<MenuFlyoutItem Text="Select" />
</MenuFlyout>
</ListView.ContextFlyout>
<ListViewItem>Track 1</ListViewItem>
<ListViewItem>Alternative Track 1</ListViewItem>
</ListView>
Atribut ScopeOwner prvku MenuFlyoutItem.KeyboardAccelerators označuje akcelerátor jako vymezený místo globálního objektu (výchozí hodnota je null nebo globální). Další podrobnosti najdete v části Řešení akcelerátorů dále v tomto tématu.
Vyvolání akcelerátoru klávesnice
Objekt KeyboardAccelerator používá vzor ovládacího prvku model UI Automation (UIA) k vykonání akce, když je akcelerátor vyvolán.
UIA [vzory ovládacích prvků] zpřístupňují standardní funkčnost. Například ovládací prvek Button implementuje vzor ovládacího prvku Invoke pro podporu události Click (obvykle je vyvolán ovládací prvek kliknutím, poklikáním nebo stisknutím klávesy Enter, předdefinovanou klávesovou zkratkou nebo jinou kombinací klávesových úhozů). Pokud se k vyvolání ovládacího prvku používá akcelerátor klávesnice, architektura XAML vyhledá, jestli ovládací prvek implementuje vzor ovládacího prvku Invoke a pokud ano, aktivuje ho (není nutné naslouchat události KeyboardAcceleratorIn invoke).
V následujícím příkladu control+S aktivuje událost Kliknutí, protože tlačítko implementuje vzor Invoke.
<Button Content="Save" Click="OnSave">
<Button.KeyboardAccelerators>
<KeyboardAccelerator Key="S" Modifiers="Control" />
</Button.KeyboardAccelerators>
</Button>
Pokud prvek implementuje více řídicích vzorů, lze prostřednictvím akcelerátoru aktivovat pouze jeden. Vzory ovládacích prvků jsou upřednostňovány následujícím způsobem:
- Vyvolání (tlačítko)
- Přepnout (zaškrtávací políčko)
- Výběr (ListView)
- Rozbalení/sbalení (Kombinované pole)
Pokud není zjištěna žádná shoda, akcelerátor je neplatný a zobrazí se ladicí zpráva ("Pro tuto komponentu nebyly nalezeny žádné vzory automatizace. Implementujte veškeré požadované chování ve vyvolané události. Nastavení vlastnosti Handled na hodnotu true ve vašem obslužném kódu události potlačuje tuto zprávu.")
Vlastní chování akcelerátoru klávesnice
Vyvolána událost Objekt KeyboardAccelerator se aktivuje při spuštění akcelerátoru. Objekt události KeyboardAcceleratorInvokedEventArgs obsahuje následující vlastnosti:
- Handled (Boolean): Nastavením této hodnoty na true zabráníte události, která aktivuje vzor ovládacího prvku, a zastaví bublinové události akcelerátoru. Výchozí hodnota je false.
- Element (DependencyObject): Objekt přidružený k akcelerátoru.
- KeyboardAccelerator: Akcelerátor klávesnice použitý k vyvolání události.
Zde si ukážeme, jak definovat kolekci akcelerátorů klávesnice pro položky v ListView a jak zpracovat vyvolanou událost pro každý akcelerátor.
<ListView x:Name="MyListView">
<ListView.KeyboardAccelerators>
<KeyboardAccelerator Key="A" Modifiers="Control,Shift" Invoked="SelectAllInvoked" />
<KeyboardAccelerator Key="F5" Invoked="RefreshInvoked" />
</ListView.KeyboardAccelerators>
</ListView>
void SelectAllInvoked(KeyboardAccelerator sender, KeyboardAcceleratorInvokedEventArgs args)
{
MyListView.SelectAll();
args.Handled = true;
}
void RefreshInvoked(KeyboardAccelerator sender, KeyboardAcceleratorInvokedEventArgs args)
{
MyListView.SelectionMode = ListViewSelectionMode.None;
MyListView.SelectionMode = ListViewSelectionMode.Multiple;
args.Handled = true;
}
Změna výchozího chování klávesnice
Některé ovládací prvky, když mají fokus, podporují integrované akcelerátory klávesnice, které přepíší jakýkoli akcelerátor definovaný aplikacím. Pokud má například textové pole fokus, akcelerátor Control+C zkopíruje aktuálně vybraný text (akcelerátory definované aplikací se ignorují a nespustí se žádné další funkce).
I když nedoporučujeme přepisovat výchozí chování ovládacích prvků kvůli znalostem a očekáváním uživatelů, můžete přepsat integrovaný akcelerátor klávesnice ovládacího prvku. Následující příklad ukazuje, jak přepsat akcelerátor klávesnice Control+C pro TextBox prostřednictvím obslužné rutiny události PreviewKeyDown :
private void TextBlock_PreviewKeyDown(object sender, KeyRoutedEventArgs e)
{
var ctrlState = CoreWindow.GetForCurrentThread().GetKeyState(Windows.System.VirtualKey.Control);
var isCtrlDown = ctrlState == CoreVirtualKeyStates.Down || ctrlState
== (CoreVirtualKeyStates.Down | CoreVirtualKeyStates.Locked);
if (isCtrlDown && e.Key == Windows.System.VirtualKey.C)
{
// Your custom keyboard accelerator behavior.
e.Handled = true;
}
}
Zakázání akcelerátoru klávesnice
Pokud je ovládací prvek zakázaný, přidružený akcelerátor je také zakázán. V následujícím příkladu, protože vlastnost IsEnabled položky ListView je nastavena na false, přidruženou klávesovou zkratku Control+A nelze vyvolat.
<ListView >
<ListView.KeyboardAccelerators>
<KeyboardAccelerator Key="A"
Modifiers="Control"
Invoked="CustomListViewSelecAllInvoked" />
</ListView.KeyboardAccelerators>
<TextBox>
<TextBox.KeyboardAccelerators>
<KeyboardAccelerator
Key="A"
Modifiers="Control"
Invoked="CustomTextSelecAllInvoked"
IsEnabled="False" />
</TextBox.KeyboardAccelerators>
</TextBox>
<ListView>
Nadřazené a podřízené ovládací prvky mohou sdílet stejný zrychlovač. V tomto případě lze vyvolat nadřazený ovládací prvek i v případě, že má podřízený prvek fokus a jeho akcelerátor je zakázaný.
Čtečky obrazovky a akcelerátory klávesnice
Čtečky obrazovky, jako je Předčítání, mohou uživatelům oznámit kombinaci akceleračních kláves. Ve výchozím nastavení je to každý modifikátor (v pořadí výčtu VirtualModifiers) následovaný klíčem (a oddělen znakem +). Můžete ho přizpůsobit prostřednictvím připojené vlastnosti AcceleratorKey AutomationProperties. Pokud je zadáno více než jeden akcelerátor, oznámí se pouze první akcelerátor.
V tomto příkladu vrátí AutomationProperty.AcceleratorKey řetězec Control+Shift+A:
<ListView x:Name="MyListView">
<ListView.KeyboardAccelerators>
<KeyboardAccelerator
Key="A"
Modifiers="Control,Shift"
Invoked="CustomSelectAllInvoked" />
<KeyboardAccelerator
Key="F5"
Modifiers="None"
Invoked="RefreshInvoked" />
</ListView.KeyboardAccelerators>
</ListView>
Poznámka:
Nastavení AutomationProperties.AcceleratorKey neumožňuje funkce klávesnice, označuje pouze rozhraní UIA, které klávesy se používají.
Běžné klávesové zkratky
Doporučujeme, aby akcelerátory klávesnice byly v aplikacích pro Windows konzistentní.
Uživatelé si musí zapamatovat akcelerátory klávesnice a očekávat stejné (nebo podobné) výsledky, ale nemusí to být vždy možné kvůli rozdílům ve funkcích napříč aplikacemi.
| Editace | Běžný akcelerátor klávesnice |
|---|---|
| Zahájení režimu úprav | Ctrl+E |
| Výběr všech položek v ovládacím prvku nebo okně s fokusem | Ctrl+A |
| Hledání a nahrazení | Ctrl+H |
| Zpět | Ctrl+Z |
| Znovu | Ctrl+Y |
| Odstranění výběru a zkopírování do schránky | Ctrl+X |
| Zkopírujte výběr do schránky | Ctrl+C, Ctrl+Insert |
| Vložte obsah schránky | Ctrl+V, Shift+Insert |
| Vložte obsah schránky (s možnostmi) | Ctrl+Alt+V |
| Přejmenování položky | F2 |
| Přidání nové položky | Ctrl+N |
| Přidání nové sekundární položky | Ctrl+Shift+N |
| Odstranit vybranou položku (s vrácením zpět) | Del, Ctrl+D |
| Odstranit vybranou položku (bez vrácení zpět) | Shift+Del |
| Bold | Ctrl+B |
| Podtržení | Ctrl+U |
| Kurzíva | Ctrl+I |
| Navigace | |
| Vyhledání obsahu v ovládacím prvku nebo okně s fokusem | Ctrl+F |
| Přechod na další výsledek hledání | F3 |
| Přechod na další podokno uživatelského rozhraní | F6 |
| Přechod na předchozí podokno uživatelského rozhraní | Shift+F6 |
| Další akce | |
| Přidání oblíbených položek | Ctrl+D |
| Obnovit | F5 nebo Ctrl +R |
| Přiblížit | Ctrl + + |
| Oddálit | Ctrl+- |
| Přiblížit na výchozí zobrazení | Ctrl+0 |
| Uložit | Ctrl+S |
| Close | Ctrl+W |
| Ctrl+P |
Všimněte si, že některé kombinace nejsou platné pro lokalizované verze Systému Windows. Například ve španělské verzi Windows se pro tučné písmo místo Ctrl+B používá kombinace Ctrl+N. Pokud je aplikace lokalizovaná, doporučujeme poskytovat lokalizované akcelerátory klávesnice.
Dostupnost použitelnosti pro akcelerátory klávesnice
Nápověda
Protože akcelerátory klávesnice nejsou obvykle popsány přímo v uživatelském rozhraní aplikace pro Windows, můžete zlepšit zjistitelnost prostřednictvím popisů tlačítek, které se automaticky zobrazí, když uživatel přesune fokus, stiskne a podrží nebo najede myší na ovládací prvek. Popis může určit, jestli má ovládací prvek přidružený akcelerátor klávesnice, a pokud ano, jaká je kombinace kláves akcelerátoru.
Ve výchozím nastavení při deklaraci akcelerátorů klávesnice všechny ovládací prvky (s výjimkou MenuFlyoutItem a ToggleMenuFlyoutItem) zobrazují odpovídající kombinace kláves v popisu.
Poznámka:
Pokud má ovládací prvek definovaný více než jeden akcelerátor, zobrazí se pouze první akcelerátor.
Klávesová zkratka v popisku
U objektů Button, AppBarButton a AppBarToggleButton se k výchozímu popisu ovládacího prvku připojí akcelerátor klávesnice. U objektů MenuFlyoutItem a ToggleMenuFlyoutItem se zobrazí akcelerátor klávesnice společně s textem kontextové nabídky.
Poznámka:
Zadání popisu (viz Tlačítko1 v následujícím příkladu) toto chování přepíše.
<StackPanel x:Name="Container" Grid.Row="0" Background="AliceBlue">
<Button Content="Button1" Margin="20"
Click="OnSave"
KeyboardAcceleratorPlacementMode="Auto"
ToolTipService.ToolTip="Tooltip">
<Button.KeyboardAccelerators>
<KeyboardAccelerator Key="A" Modifiers="Windows"/>
</Button.KeyboardAccelerators>
</Button>
<Button Content="Button2" Margin="20"
Click="OnSave"
KeyboardAcceleratorPlacementMode="Auto">
<Button.KeyboardAccelerators>
<KeyboardAccelerator Key="B" Modifiers="Windows"/>
</Button.KeyboardAccelerators>
</Button>
<Button Content="Button3" Margin="20"
Click="OnSave"
KeyboardAcceleratorPlacementMode="Auto">
<Button.KeyboardAccelerators>
<KeyboardAccelerator Key="C" Modifiers="Windows"/>
</Button.KeyboardAccelerators>
</Button>
</StackPanel>
Kombinace kláves akcelerátoru přidána k výchozímu popisku tlačítka
<AppBarButton Icon="Save" Label="Save">
<AppBarButton.KeyboardAccelerators>
<KeyboardAccelerator Key="S" Modifiers="Control"/>
</AppBarButton.KeyboardAccelerators>
</AppBarButton>
Kombinace kláves zrychlovače připojená k výchozímu popisku AppBarButton
<AppBarButton AccessKey="R" Icon="Refresh" Label="Refresh" IsAccessKeyScope="True">
<AppBarButton.Flyout>
<MenuFlyout>
<MenuFlyoutItem AccessKey="A" Icon="Refresh" Text="Refresh A">
<MenuFlyoutItem.KeyboardAccelerators>
<KeyboardAccelerator Key="R" Modifiers="Control"/>
</MenuFlyoutItem.KeyboardAccelerators>
</MenuFlyoutItem>
<MenuFlyoutItem AccessKey="B" Icon="Globe" Text="Refresh B" />
<MenuFlyoutItem AccessKey="C" Icon="Globe" Text="Refresh C" />
<MenuFlyoutItem AccessKey="D" Icon="Globe" Text="Refresh D" />
<ToggleMenuFlyoutItem AccessKey="E" Icon="Globe" Text="ToggleMe">
<MenuFlyoutItem.KeyboardAccelerators>
<KeyboardAccelerator Key="Q" Modifiers="Control"/>
</MenuFlyoutItem.KeyboardAccelerators>
</ToggleMenuFlyoutItem>
</MenuFlyout>
</AppBarButton.Flyout>
</AppBarButton>
Kombinace kláves zrychlení připojena k textu položky MenuFlyout
Řízení chování prezentace pomocí KeyboardAcceleratorPlacementMode vlastnost, která přijímá dvě hodnoty: Auto nebo Hidden.
<Button Content="Save" Click="OnSave" KeyboardAcceleratorPlacementMode="Auto">
<Button.KeyboardAccelerators>
<KeyboardAccelerator Key="S" Modifiers="Control" />
</Button.KeyboardAccelerators>
</Button>
V některých případech může být nutné zobrazit tip vzhledem k jinému prvku (obvykle kontejnerovému objektu).
Zde ukážeme, jak pomocí vlastnosti KeyboardAcceleratorPlacementTarget zobrazit kombinaci klávesové zkratky pro tlačítko Uložit v kontejneru Grid místo na tlačítku.
<Grid x:Name="Container" Padding="30">
<Button Content="Save"
Click="OnSave"
KeyboardAcceleratorPlacementMode="Auto"
KeyboardAcceleratorPlacementTarget="{x:Bind Container}">
<Button.KeyboardAccelerators>
<KeyboardAccelerator Key="S" Modifiers="Control" />
</Button.KeyboardAccelerators>
</Button>
</Grid>
Štítky
V některých případech doporučujeme použít popisek ovládacího prvku k určení, jestli má ovládací prvek přidružený akcelerátor klávesnice, a pokud ano, jaká je kombinace kláves akcelerátoru.
Některé ovládací prvky platformy to dělají ve výchozím nastavení, konkrétně objekty MenuFlyoutItem a ToggleMenuFlyoutItem, zatímco AppBarButton a AppBarToggleButton to dělají, když se objeví v nabídce přetečení CommandBar.
Klávesové zkratky uvedené v názvu položky nabídky
Výchozí text akcelerátoru pro popisek můžete přepsat pomocí vlastnosti KeyboardAcceleratorTextOverride ovládacích prvků MenuFlyoutItem, ToggleMenuFlyoutItem, AppBarButton a AppBarToggleButton (pro žádný text použijte jednu mezeru).
Poznámka:
Pokud systém nedokáže rozpoznat připojenou klávesnici, text přepsání se nezobrazí (můžete to zkontrolovat sami pomocí vlastnosti KeyboardPresent).
Pokročilé koncepty
Tady si projdeme některé aspekty akcelerátorů klávesnice na nízké úrovni.
Priorita vstupní události
Vstupní události probíhají v konkrétní sekvenci, kterou můžete zachytit a zpracovat na základě požadavků vaší aplikace.
Událost bublování KeyDown/KeyUp
V XAML se stisk klávesy zpracovává, jako by existoval pouze jeden vstupní bublající kanál. Události KeyDown/KeyUp a vstup znaků používají tento vstupní kanál. Pokud má například prvek fokus a uživatel stiskne klávesu, vyvolá se na prvku událost KeyDown, která se poté předá nadřazeným prvkům ve stromu, dokud není vlastnost args.Handled nastavena na true.
Událost KeyDown je také používána některými ovládacími prvky k implementaci integrovaných akcelerátorů ovládacích prvků. Pokud má ovládací prvek akcelerátor klávesnice, zpracovává událost KeyDown, což znamená, že událost KeyDown nebude bublinová. Například RichEditBox podporuje kopírování pomocí Ctrl+C. Při stisknutí klávesy Ctrl se aktivuje událost KeyDown a bubliny, ale když uživatel současně stiskne klávesu C, událost KeyDown se označí jako handled a není vyvolána (pokud není parametr handledEventsToo UIElement.AddHandler nastaven na hodnotu true).
Událost CharacterReceived
Když se událost CharacterReceived aktivuje po události KeyDown pro textové ovládací prvky, jako je TextBox, můžete zrušit vstup znaků v obslužné rutině události KeyDown.
Události PreviewKeyDown a PreviewKeyUp
Vstupní události náhledu se aktivují před všemi dalšími událostmi. Pokud tyto události nezpracujete, nejprve se aktivuje akcelerátor prvku, který má fokus, a následně dojde k události KeyDown. Obě události se šíří, dokud nejsou zpracovány.
Klíčová posloupnost událostí
Pořadí událostí:
Náhled událostí KeyDownu
…
Akcelerátor aplikací
OnKeyDown – metoda
Událost KeyDown
Akcelerátory aplikací ve vztahu k nadřazenému objektu
OnKeyDown – metoda u nadřazeného objektu
Událost KeyDown u nadřazeného objektu
(Bubliny ke kořeni)
…
CharacterReceived – událost
Události PreviewKeyUp
KeyUpEvents
Když je událost akcelerátoru zpracována, označí se také událost KeyDown jako vyřízená. Událost KeyUp zůstává neošetřená.
Řešení akcelerátorů
Událost akcelerátoru klávesnice postupuje z prvku, který má fokus, až ke kořeni. Pokud událost není zpracována, architektura XAML hledá jiné nesvázané aplikační akcelerátory mimo bublinové trasy.
Pokud jsou definovány dva akcelerátory klávesnice se stejnou kombinací kláves, vyvolá se první akcelerátor klávesnice nalezený ve vizuálním stromu.
Klávesové akcelerátory omezené na určitý obor se vyvolávají jen tehdy, když je fokus uvnitř konkrétní oblasti. Například v mřížce, která obsahuje desítky ovládacích prvků, lze pro ovládací prvek vyvolat akcelerátor klávesnice pouze v případě, že fokus je v mřížce (vlastník rozsahu).
Vymezení akcelerátorů programově
UiElement.TryInvokeKeyboardAccelerator metoda vyvolá všechny odpovídající akcelerátory v podstromu elementu.
Metoda UIElement.OnProcessKeyboardAccelerators se spustí před akcelerátorem klávesnice. Tato metoda předá ProcessKeyboardAcceleratorArgs objekt, který obsahuje klíč, modifikátor a logickou hodnotu označující, zda je akcelerátor klávesnice zpracován. Pokud je označený jako zpracovaný, bubliny akcelerátoru klávesnice (takže vnější akcelerátor klávesnice se nikdy nevyvolá).
Poznámka:
OnProcessKeyboardAccelerators se vždy aktivuje bez ohledu na to, jestli se zpracovává nebo ne (podobá se události OnKeyDown). Musíte zkontrolovat, jestli byla událost označena jako zpracována.
V tomto příkladu používáme OnProcessKeyboardAccelerators a TryInvokeKeyboardAccelerator k určení rozsahu akcelerátorů klávesnice na objekt Page:
protected override void OnProcessKeyboardAccelerators(
ProcessKeyboardAcceleratorArgs args)
{
if(args.Handled != true)
{
this.TryInvokeKeyboardAccelerator(args);
args.Handled = true;
}
}
Lokalizace akcelerátorů
Doporučujeme lokalizovat všechny akcelerátory klávesnice. Můžete to provést pomocí standardního souboru prostředků (.resw) a atributu x:Uid v deklaracích XAML. V tomto příkladu prostředí Windows Runtime automaticky načte prostředky.
Lokalizace akcelerátoru klávesnice se souborem prostředků
<Button x:Uid="myButton" Click="OnSave">
<Button.KeyboardAccelerators>
<KeyboardAccelerator x:Uid="myKeyAccelerator" Modifiers="Control"/>
</Button.KeyboardAccelerators>
</Button>
Poznámka:
Akcelerátory klávesnice se implementují jako virtuální klávesy. Lokalizované akcelerátory musí být vybrány z předdefinované kolekce kódůVirtual-Key (jinak dojde k chybě analyzátoru XAML).
Programové nastavení akcelerátoru
Tady je příklad programového definování akcelerátoru:
void AddAccelerator(
VirtualKeyModifiers keyModifiers,
VirtualKey key,
TypedEventHandler<KeyboardAccelerator, KeyboardAcceleratorInvokedEventArgs> handler )
{
var accelerator =
new KeyboardAccelerator()
{
Modifiers = keyModifiers, Key = key
};
accelerator.Invoked += handler;
this.KeyboardAccelerators.Add(accelerator);
}
Poznámka:
KeyboardAccelerator není možné sdílet, stejný KeyboardAccelerator nelze přidat do více prvků.
Potlačení chování akcelerátoru klávesnice
Můžete zpracovat Událost KeyboardAccelerator.Invoked, která nahradí výchozí chování KeyboardAccelerator.
Tento příklad ukazuje, jak přepsat příkaz "Vybrat vše" (Ctrl+A akcelerátor klávesnice) ve vlastním ovládacím prvku ListView. Vlastnost Handled jsme také nastavili na hodnotu true, aby se zastavila propagace události.
public class MyListView : ListView
{
…
protected override void OnKeyboardAcceleratorInvoked(KeyboardAcceleratorInvokedEventArgs args)
{
if(args.Accelerator.Key == VirtualKey.A
&& args.Accelerator.Modifiers == KeyboardModifiers.Control)
{
CustomSelectAll(TypeOfSelection.OnlyNumbers);
args.Handled = true;
}
}
…
}
Související články
Samples
Windows developer