WPF:如何禁用标签导航也没有禁止箭头键导航?
-
25-09-2019 - |
题
我已经设置IsTabStop
假在我的窗口中的所有控制,所以,当我按下Tab键,焦点不动(我需要别的东西Tab键)。但是,这样做休息箭头键导航 - 我在ListView
单击一个项目,然后按上/下不会再改变所选择的项目
有一种方法来禁用标签导航,但是没有触摸箭头键导航?他们似乎是相关的。
我试过设置IsTabStop
为true,TabNavigation
假,但它并不能工作。
<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键。
可以通过附加到PreviewKeyDown事件和集吞下它e.Handled =真时,关键是一个选项卡。
纯代码背后:
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;
}
}
其他提示
我相信你想要的是在 KeyboardNavigation.TabNavigation 连接属性设置为一旦您的ListView。我曾与一个模板ItemsControl的做到了这一点,似乎给我,我会从像一个列表框,其中一个选项卡到控制将选择的第一个项目,但附加的标签将标签从右侧列表框,并到所期望的行为下一个控制。
所以以下这种方法您的实例可以是能够被shortend下降到只有这一点。
<ListView ItemContainerStyle="{StaticResource ItemCommon}"
KeyboardNavigation.TabNavigation="Once" />
我还没有与ListView控件测试然而,这不过它是否适合你,我不会感到惊讶。
不隶属于 StackOverflow