WPF: Как отключить навигацию вклады, не отключающую навигацию клавиши со стрелкой?

StackOverflow https://stackoverflow.com/questions/4210659

  •  25-09-2019
  •  | 
  •  

Вопрос

Я установил IsTabStop Чтобы ложь на всех элементах управления в моем окне, так что, когда я нажимаю клавишу Tab, фокус не двигается (мне нужен ключ вкладки для чего-то другого). Но делает это перерывы навигации навигации со стрелкой - я нажимаю на элемент в 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>
Это было полезно?

Решение

В вашем окне (или некоторое предку элементов управления вы не хотите работать на) проглотить клавишу вкладки.

Вы можете проглотить его, прикрепив к событию предыдущего проявления и установите E.chandled = 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;
        }
    }

Другие советы

Я верю, что вы хотите, это установить Keyboardnavigation.tabnavigation. Прилагается свойство To Один раз В вашем списке. Я сделал это с помощью шаблонных элементовControl, и, похоже, дает мне поведение, которое я ожидаю, что он ожидал, как список ListBox, где вкладка в управление выберет первый элемент, но вкладка «Дополнительная вкладка» вкладка вкладка прямо из списка и на Следующий контроль.

Таким образом, следуя этот метод, ваш пример может быть в состоянии по договорной цене для этого.

<ListView ItemContainerStyle="{StaticResource ItemCommon}"
          KeyboardNavigation.TabNavigation="Once" />

Однако я не проверял это с помощью элемента управления ListView, но я не был бы удивлен, если это работает для вас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top