WPF焦点导航包装

3

有没有办法强制焦点导航(由Tab键或MoveFocus方法控制)在给定容器内进行换行? 我已经在下面包含了演示此问题的代码。最简单的方法是使Tab从TextBox"Charlie"转移到TextBox"Able"(Shift+Tab在TextBox"Able"上反向操作),而不是将其移动到MenuItem"Alpha"。

<Window x:Class="NavWrapExample.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <DockPanel LastChildFill="True">
        <Menu DockPanel.Dock="Top">
            <MenuItem Header="Alpha" />
            <MenuItem Header="Bravo" />
            <MenuItem Header="Charlie" />
        </Menu>
        <StackPanel>
            <TextBox Text="Able" />
            <TextBox Text="Baker" />
            <TextBox Text="Charlie" />
        </StackPanel>
    </DockPanel>
</Window>
2个回答

4

使用键盘导航的 attached property KeyboardNavigation.TabNavigation,如下所示:

<StackPanel KeyboardNavigation.TabNavigation="Cycle">
    <TextBox Text="Able" />
    <TextBox Text="Baker" />
    <TextBox Text="Charlie" />
</StackPanel>

Mark Smith的博客中找到了答案。


-1

听起来你想要的是与工具栏相同的行为:你可以通过Tab键进入它们,但一旦工具栏内的元素获得键盘焦点,焦点就会在内部循环。如果是这样,请按以下方式使用FocusManager:

<StackPanel FocusManager.IsFocusScope="True">
    <!-- Controls go here... -->
</StackPanel>

2
IsFocusScope 是完全不同的东西 - 它定义了一个新的逻辑焦点范围,可以在该范围内记住逻辑焦点,并在键盘(“物理”)焦点返回到该范围时恢复。拥有它并不能启用 Tab 循环行为 - 这由 KeyboardNavigation.TabNavigation 属性控制,如其他答案中所述。 - Pavel Minaev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接