访问键的概念(有时称为加速键或键盘加速器)允许您通过按住Alt键然后按键盘上的其他键来到达窗口内的特定控件。 这增强了窗口的可用性,因为它允许用户使用键盘导航窗口,而不必使用鼠标。
为WPF控件定义访问键非常简单,但该方法可能会让您感到惊讶。 通常,会有一个属性,但不适用于访问键。 相反,您可以通过在控件的Text / Content属性中使用添加下划线前缀来定义访问键。 例如,像这样:
<Button Content="_New"></Button>
注意N字符前面的下划线(_) - 这会将N键转换为此Button控件的指定访问键。 默认情况下,控件的外观不会改变,正如您在此示例中所示,我已为所有按钮定义了访问键:
但是,只要按下键盘上的Alt键,可用的下划线就会突出显示可用的访问键:
按住Alt键的同时,您现在可以按其中一个访问键(例如N,O或S)来激活特定按钮。 它会像用鼠标点击一样反应。
访问键适用于对话框/窗口中的单个元素,但它们在传统的Windows菜单中更有用,您通常需要在到达所需的菜单项之前单击菜单项层次结构。 以下是Visual Studio的示例:
在这种情况下,当我想要启动一个新项目时,我可以按住Alt键,然后按F(对于文件),然后按N(对于新),而不必通过几次鼠标移动和单击来浏览菜单。 然后是P(对于项目)。 当然,这也可以通过常规键盘快捷键(Ctrl + Shift + N)完成,但是在您到达菜单层次结构的最后一级之前,该快捷方式是不可见的,因此除非您已将其记忆,否则可能更容易 使用访问键,因为只要按下Alt键,它们就会以视觉方式突出显示。
您可能想要使用控制文本/内容中找到的任何字符,但实际上有选择正确字符的准则。 最重要的规则当然是选择一个未被其他控件使用的字符,但除此之外,您应该使用以下指南:
在我们到目前为止看到的示例中,我们已经能够直接在我们想要访问的控件上定义Access Key。 但至少有一个例子,这是不可能直接实现的:当你有一个输入控件,例如 一个TextBox,指示其用途的文本在实际的TextBox控件中不存在。 相反,您通常会使用第二个控件来指示TextBox控件的用途。 这通常是Label控件。
因此,在此示例中,Label控件将保存描述性文本,因此也包含Access Key,但您要注意的控件将是TextBox控件。 没问题 - 我们可以使用Label的Target属性将它与TextBox(或任何其他控件)绑定在一起,如下所示:
<StackPanel Margin="20">
<Label Content="_First name:" Target="{Binding ElementName=txtFirstName}" />
<TextBox Name="txtFirstName" />
<Label Content="_Last name:" Target="{Binding ElementName=txtLastName}" />
<TextBox Name="txtLastName" />
<Button Content="_Save" Margin="20"></Button>
</StackPanel>
注意如何为Label控件指定Access Key,然后使用Target属性绑定到相关的TextBox控件,我们使用基于ElementName的Binding来执行实际工作。 现在我们可以使用Alt + F和Alt + L访问两个TextBox控件,使用Alt + S访问Button。 以下是它的外观:
通过在窗口/对话框中使用快捷键,您可以很轻鬆的使用键盘进行导航。 这在高级用户中尤其受欢迎,他们会尽可能使用键盘来支持鼠标。 您应该使用快捷键,尤其在您的菜单。