2017-01-28 13 views
0

Я хочу, когда пользователь нажимает вверх/вниз, чтобы перемещаться внутри списка, даже думал, что список не находится в фокусе. Но если пользователь вводит текстовое поле и нажимает вверх, чтобы больше не перемещаться в списке. В качестве возможного решения можно добавить событие PreviewKeyDown для каждого элемента, и если захваченный ключ вверх/вниз, то передайте его дальше по дереву, но это решение кажется не очень практичным, так как у меня много элементов.WPF - сочетания клавиш для захвата с помощью управления, даже если они не сфокусированы

Пример кода:

<StackPanel> 
    <ListView x:Name="capturesUpDownWhenTextBoxNotFocused" ItemsSource="{Binding list}" ItemTemplate="{StaticResource template}"> 
     <ListView.InputBindings> 
      <KeyBinding Key="Up" Command="{Binding upCommand}"></KeyBinding> 
      <KeyBinding Key="Down" Command="{Binding downCommand}"></KeyBinding> 
     </ListView.InputBindings> 
    </ListView> 
    <TextBox Text="random text"></TextBox> 
    <Button Content="button"></Button> 
    <ListView x:Name="doesNotCaptureUpDownEvenIfFocused" ItemsSource="{Binding activeFile.activeFilters}" ItemTemplate="{StaticResource template}"></ListView> 
</StackPanel> 

ответ

1

Вы можете обрабатывать PreviewKeyDown событие только для родительского окна:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     PreviewKeyDown += (s, e) => 
     { 
      var viewModel = DataContext as YourViewModel; 
      if(viewModel != null) 
      { 
       if (e.Key == System.Windows.Input.Key.Up) 
       { 
        viewModel.upCommand.Execute(null); 
        e.Handled = true; 
       } 
       else if(e.Key == System.Windows.Input.Key.Down) 
       { 
        viewModel.downCommand.Execute(null); 
        e.Handled = true; 
       } 
      } 

     }; 
} 

Тогда вам не нужно обрабатывать его для любого другого элемента.

И нет, нет чистого решения XAML для этого.

+0

Да, это маршрут, который я предпринял после поиска по всему миру, спасибо за ответ, подтверждающий, что это был хороший подход –

 Смежные вопросы

  • Нет связанных вопросов^_^