2017-01-28 7 views
0

ユーザーがリストビュー内で移動するために上/下を押したときに、リストビューにフォーカスがないと思ったとしても欲しいです。しかし、ユーザーがテキストボックスに入力していて、リストビュー内をもうナビゲートしないようにする場合は、 可能な解決策は、すべての要素に対してPreviewKeyDownイベントを追加することです。キャプチャされたキーがアップ/ダウンしている場合はツリーのさらに下に渡しますが、多くの要素があるのでこのソリューションはあまり実用的ではありません。WPF - フォーカスが合っていなくてもコントロールによってキャプチャされるキーボードショートカット

コード例:あなたが唯一の親ウィンドウのPreviewKeyDownイベント処理できる

<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

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

これは私がグーグルグーグルで撮影したルートです。これが良いアプローチであることを確認してくれてありがとう –

関連する問題