WPF弹出标签键错误
我有一个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
按钮时,它应该被禁用。问题是,当我禁用按钮时,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>