WPF弹出标签键错误

WPF弹出标签键错误,wpf,popup,focus,tab-ordering,Wpf,Popup,Focus,Tab Ordering,我有一个WPF弹出控件,里面有一个列表框和一个按钮。当我单击按钮时,它应该被禁用。问题是,当我禁用按钮时,Tab键从弹出窗口中消失。在我将按钮的IsEnabled设置为false之后,我尝试将焦点设置到列表框,但没有成功。那么,如何将选项卡焦点设置为弹出控件内的列表框 这是我的密码 Window1.xaml: <Window x:Class="WpfApplication5.Window1" xmlns="http://schemas.microsoft.com/winfx

我有一个WPF弹出控件,里面有一个列表框和一个按钮。当我单击
按钮时,它应该被禁用。问题是,当我禁用按钮时,Tab键从弹出窗口中消失。在我将按钮的
IsEnabled
设置为false之后,我尝试将焦点设置到列表框,但没有成功。那么,如何将选项卡焦点设置为弹出控件内的列表框

这是我的密码

Window1.xaml:

<Window x:Class="WpfApplication5.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">
    <StackPanel>
        <Button Name="openButton" Content="Open"/>
        <Popup Name="popup" Placement="Center">
            <StackPanel>
                <ListBox Name="listBox"/>
                <Button Name="newItemsButton" Content="New Items"/>
            </StackPanel>
        </Popup>
    </StackPanel>
</Window>
下面是一个屏幕截图:

以后编辑:

我找到了一个解决方法,那就是延迟
FocusListBox()按如下方式调用:

Dispatcher.BeginInvoke(new Action(FocusListBox), DispatcherPriority.Input);

您需要通过在弹出窗口上设置来定义明确的焦点范围:

<Popup FocusManager.IsFocusScope="true">
  <!-- your content here -->
</Popup>


这将防止焦点移回包含元素内的控件。

KeyboardNavigation.TabNavigation=“Cycle”不起任何作用。对不起,你说得对,这是关于焦点范围的。测试了它,它工作了,修改了我的答案。仅供参考,当我测试它时,我完全按照您提供的方式留下了您的代码(通过显式调用来聚焦列表框)。意识到这一点,我返回并删除它,焦点仍然跳出弹出窗口,这是非常奇怪的。至少现在它可以让你不用用定时器来延迟设置焦距。
<Popup FocusManager.IsFocusScope="true">
  <!-- your content here -->
</Popup>