【发布时间】:2016-01-12 20:19:52
【问题描述】:
在 WPF 中,默认情况下,当焦点控件变为不可见时,焦点将更改为下一个可焦点父容器。是否有一种通用的方法可以将焦点移到下一个可聚焦的同级控件?例如,给定这个人为的例子:
<StackPanel Focusable="True">
<Button Height="30" Width="150" Click="Button_Click">First</Button>
<Button Height="30" Width="150">Second</Button>
</StackPanel>
这个事件处理程序隐藏第一个按钮:
private void Button_Click(object sender, RoutedEventArgs e)
{
((Button) sender).Visibility = Visibility.Collapsed;
}
如果您切换到第一个按钮并按 Enter,则 StackPanel 将获得焦点。我希望第二个按钮获得焦点。
我希望有一个通用的解决方案(而不是通过后面的代码将焦点设置到特定元素),因为我的应用中有几个地方是键盘导航的问题。
【问题讨论】:
-
StackPanel 上的FocusManager.IsFocusScope 有这个效果吗?
-
是的,它的作用相同。如果直接父级将
IsFocusScope设置为false,则WPF 似乎只是沿着树向上查找第一个可聚焦的父控件,然后将其聚焦。 (实际上,这些容器是用户控件或 ListBox,它们可以合法地获得焦点,而不是 StackPanel。)