WPF焦点导航包装

时间:2009-08-13 20:05:19

标签: wpf navigation focus

有没有办法强制聚焦导航(由Tab键或MoveFocus方法控制)包装在给定容器内?我已经包含了在下面演示此问题的代码。最简单的方法是让Tab将焦点从TextBox“Charlie”移动到TextBox“Able”(对于TextBox“Able”上的Shift + Tab,反之亦然)而非移动它到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 个答案:

答案 0 :(得分:4)

使用Ke yboardNavigation.TabNavigation附加属性,如下所示:

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

Mark Smith's blog找到答案。

答案 1 :(得分:-1)

听起来你想要的是与工具栏相同的行为:你可以将它们标记到它们中,但是一旦工具栏中的一个元素获得键盘焦点,就会将焦点循环到其中。如果是这样,请按如下方式使用FocusManager:

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