我已经设置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控件测试然而,这不过它是否适合你,我不会感到惊讶。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top