【问题标题】:WPF Focus Navigation WrappingWPF 焦点导航包装
【发布时间】:2009-08-13 20:05:19
【问题描述】:

有没有办法强制焦点导航(由 Tab 键或MoveFocus 方法控制)包裹在给定的容器中?我在下面包含了演示此问题的代码。什么是让 Tab 将焦点从TextBox“Charlie”移动到TextBox“Able”(反之亦然,Shift+Tab on TextBox“Able”)而不是将其移动到MenuItem“阿尔法”?

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

【问题讨论】:

    标签: wpf navigation focus


    【解决方案1】:

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

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

    Mark Smith's blog找到答案。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • IsFocusScope 是完全不同的东西 - 它定义了一个新的逻辑焦点范围,该范围记住该范围内的逻辑焦点,并在键盘(“物理”)焦点返回该范围时恢复它.拥有它不会启用标签循环行为 - 由 KeyboardNavigation.TabNavigation 属性控制,如另一个答案中所述。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多