当控件变得不可见时,如何将焦点移动到下一个兄弟而不是父节点?

时间:2016-01-12 20:19:53

标签: c# wpf xaml

在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将获得焦点。我希望第二个按钮获得焦点。

我希望有一个通用的解决方案(而不是通过后面的代码将焦点设置到特定元素),因为我的应用中有几个地方,这是键盘导航的问题。

1 个答案:

答案 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