WPF - 即使没有聚焦,也可以通过控制捕获键盘快捷键

时间:2017-01-28 19:51:52

标签: wpf keyboard-shortcuts lost-focus

我希望用户按下向上/向下移动到列表视图中,即使列表视图不在焦点上。但是,如果用户正在键入文本框并向下按下而不再在列表视图中导航。 可能的解决方案是为每个元素添加一个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 个答案:

答案 0 :(得分: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; } } }; } 事件:

To (&)(const From&)

然后你不需要为任何其他元素处理它。

不,没有纯XAML解决方案。