我的 WPF 应用程序中有一个简单的弹出窗口。此弹出窗口中有一个带有访问键的按钮。
我遇到的问题是这个按钮不响应 Alt+access-key 组合。此外,按 Alt 不会像在普通窗口中那样使访问键可见。
有什么方法可以让弹出窗口中的控件响应 Alt+access-key 组合?
PS 我对通过此弹出窗口使用 Tab 进行导航没有问题。
我正在使用的样本代码
<Grid>
<Button Click="ButtonBase_OnClick" Content="_Open File"></Button>
<Popup x:Name="Popup" StaysOpen="False">
<Grid Background="White">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Button Content="_Open File"/>
<Button Grid.Row="1" Content="O_pen File"/>
<CheckBox Grid.Row="2" Content="_Go"></CheckBox>
</Grid>
</Popup>
</Grid>
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
Popup.IsOpen = true;
}
正如第一个答案所暗示的那样,我也尝试过添加这个
private void Popup_OnOpened(object sender, EventArgs e)
{
var popup = sender as Popup;
popup.Child.Focusable = true;
Keyboard.Focus(popup.Child);
}
我也尝试了第一条评论的想法
private void Popup_OnOpened(object sender, EventArgs e)
{
var popup = sender as Popup;
FocusManager.SetIsFocusScope(popup, true);
}
或者使用建议的链接codeproject.com/Articles/38507/Using-the-WPF-FocusScope代替标准焦点范围
EnhancedFocusScope.SetFocusOnActiveElementInScope(popup);
设置焦点范围有点帮助,但我没有设法让它完全按照我的意愿工作。将焦点范围设置为 true 确实有助于将 alt+key 组合用于复选框和标签+文本框,但不适用于按钮。虽然我可以使用 Alt+access 组合键,但我实际上看不到它们,因为按下 Alt 时没有出现下划线