在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将获得焦点。我希望第二个按钮获得焦点。
我希望有一个通用的解决方案(而不是通过后面的代码将焦点设置到特定元素),因为我的应用中有几个地方,这是键盘导航的问题。
答案 0 :(得分:1)
FocusManager.SetFocusedElement
https://msdn.microsoft.com/en-us/library/system.windows.input.focusmanager.setfocusedelement(v=vs.110).aspx可用于将逻辑焦点设置为特定元素。
FocusManager.SetFocusedElement(focusScope1, button2);
您需要拥有当前的焦点范围。
这可以从XAML完成:
<Style x:Key="FocusButton" TargetType="StackPanel">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=button1, Path=IsVisible}" Value="True">
<Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=button2}"/>
</DataTrigger>
</Style.Triggers>
</Style>
逻辑焦点与键盘焦点不同 - MSDN