Windows 上的 VisualElement 访问密钥

访问键是键盘快捷方式,它通过为用户提供直观的方式来快速导航和通过键盘而不是触摸或鼠标与应用的可见 UI 进行交互,从而提高通用 Windows 平台 (UWP) 上应用的可用性和辅助功能。 它们是 Alt 键和一个或多个字母数字键的组合,通常按顺序按下。 使用单个字母数字字符的访问键会自动支持键盘快捷方式。

访问键提示是在包含访问键的控件旁边显示的浮动锁屏提醒。 每个访问键提示都包含激活关联控件的字母数字键。 当用户按 Alt 键时,将显示访问键提示。

此 UWP 平台特定功能用于指定 VisualElement 的访问密钥。 通过将 VisualElement.AccessKey 附加属性设置为字母数字值,还可以选择将 VisualElement.AccessKeyPlacement 附加属性设置为 AccessKeyPlacement 枚举的值、将 VisualElement.AccessKeyHorizontalOffset 附加属性设置为 double 以及将 VisualElement.AccessKeyVerticalOffset 附加属性设置为 double 以在 XAML 中使用它:

<TabbedPage ...
            xmlns:windows="clr-namespace:Xamarin.Forms.PlatformConfiguration.WindowsSpecific;assembly=Xamarin.Forms.Core">
    <ContentPage Title="Page 1"
                 windows:VisualElement.AccessKey="1">
        <StackLayout Margin="20">
            ...
            <Switch windows:VisualElement.AccessKey="A" />
            <Entry Placeholder="Enter text here"
                   windows:VisualElement.AccessKey="B" />
            ...
            <Button Text="Access key F, placement top with offsets"
                    Margin="20"
                    Clicked="OnButtonClicked"
                    windows:VisualElement.AccessKey="F"
                    windows:VisualElement.AccessKeyPlacement="Top"
                    windows:VisualElement.AccessKeyHorizontalOffset="20"
                    windows:VisualElement.AccessKeyVerticalOffset="20" />
            ...
        </StackLayout>
    </ContentPage>
    ...
</TabbedPage>

或者,可以使用 Fluent API 在 C# 中使用它:

using Xamarin.Forms.PlatformConfiguration;
using Xamarin.Forms.PlatformConfiguration.WindowsSpecific;
...

var page = new ContentPage { Title = "Page 1" };
page.On<Windows>().SetAccessKey("1");

var switchView = new Switch();
switchView.On<Windows>().SetAccessKey("A");
var entry = new Entry { Placeholder = "Enter text here" };
entry.On<Windows>().SetAccessKey("B");
...

var button4 = new Button { Text = "Access key F, placement top with offsets", Margin = new Thickness(20) };
button4.Clicked += OnButtonClicked;
button4.On<Windows>()
    .SetAccessKey("F")
    .SetAccessKeyPlacement(AccessKeyPlacement.Top)
    .SetAccessKeyHorizontalOffset(20)
    .SetAccessKeyVerticalOffset(20);
...

VisualElement.On<Windows> 方法指定此特定于平台的功能仅在通用 Windows 平台上运行。 Xamarin.Forms.PlatformConfiguration.WindowsSpecific 命名空间中的 VisualElement.SetAccessKey 方法用于设置 VisualElement 的访问键值。 VisualElement.SetAccessKeyPlacement 方法(可选)指定用于显示访问键提示的位置,AccessKeyPlacement 枚举提供以下可能的值:

  • Auto – 指示访问键提示位置将由操作系统确定。
  • Top – 指示访问键提示将位于 VisualElement 的上边缘之上。
  • Bottom – 指示访问键提示将位于 VisualElement 的下边缘之下。
  • Right – 指示访问键提示将位于 VisualElement 的右边缘右侧。
  • Left – 指示访问键提示将位于 VisualElement 的左边缘左侧。
  • Center – 指示访问键提示将覆盖在 VisualElement 的中心位置。

注意

通常,Auto 键提示位置就足够了,其中包括对自适应用户界面的支持。

VisualElement.SetAccessKeyHorizontalOffsetVisualElement.SetAccessKeyVerticalOffset 方法可用于更精细地控制访问键提示位置。 SetAccessKeyHorizontalOffset 方法的参数指示向左或向右移动访问键提示的距离,SetAccessKeyVerticalOffset 方法的参数指示向上或向下移动访问键提示的距离。

注意

设置 Auto 访问键位置时,无法设置访问键提示偏移量。

此外,可以使用 GetAccessKeyGetAccessKeyPlacementGetAccessKeyHorizontalOffsetGetAccessKeyVerticalOffset 方法检索访问键值及其位置。

结果是,通过按 Alt 键,可以在定义访问键的任何 VisualElement 实例旁边显示访问键提示:

特定于平台的 VisualElement 访问键

当用户激活访问键时,通过按 Alt 键,然后按访问键,将执行 VisualElement 的默认操作。 例如,当用户在 Switch 上激活访问键时,将切换 Switch。 当用户在 Entry 上激活访问键时,Entry 将获得焦点。 当用户在 Button 上激活访问键时,将执行 Clicked 事件的事件处理程序。

警告

默认情况下,显示模式对话框时,仍可激活对话框后面页面上定义的任何访问密钥。 但是,可以编写自定义逻辑以在此方案中禁用访问密钥。 实现方法是,在 UWP 项目的 MainPage 类中处理 Dispatcher.AcceleratorKeyActivated 事件,并在显示模式对话框时,在事件处理程序中将事件参数 Handled 属性设置为 true

有关访问键的详细信息,请参阅访问键