我已经设定IsTabStop
在我的窗口中的所有控件上设置为 false,这样当我按 Tab 键时,焦点不会移动(我需要 Tab 键来执行其他操作)。但是这样做会破坏箭头键导航 - 我单击 a 中的一个项目ListView
然后按向上/向下不会再更改所选项目。
有没有办法禁用选项卡导航,但不触摸箭头键导航?他们似乎有联系。
我尝试设置IsTabStop
为真且TabNavigation
为 false,但它也不起作用。
<ListView ItemContainerStyle="{StaticResource ItemCommon}" IsTabStop="False">
<ListView.Resources>
<Style x:Key="ItemCommon">
<Setter Property="IsTabStop" Value="False"/>
<Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>
<Setter Property="KeyboardNavigation.DirectionalNavigation" Value="Cycle"/>
</Style>
</ListView.Resources>
</ListView>
在您的窗口(或您不希望使用 Tab 键的控件的某些祖先)上吞下 Tab 键。
您可以通过附加到 PreviewKeyDown 事件并在按键为选项卡时设置 e.Handled = true 来吞下它。
背后的纯代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.PreviewKeyDown += MainWindowPreviewKeyDown;
}
static void MainWindowPreviewKeyDown(object sender, KeyEventArgs e)
{
if(e.Key == Key.Tab)
{
e.Handled = true;
}
}
}
您还可以设置键盘处理程序,如下所示:
<Window x:Class="TabSwallowTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
Keyboard.PreviewKeyDown="Window_PreviewKeyDown" >
<StackPanel>
<TextBox Width="200" Margin="10"></TextBox>
<TextBox Width="200" Margin="10"></TextBox>
</StackPanel>
</Window>
但你需要一个相应的事件处理程序:
private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab)
{
e.Handled = true;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)