Как предотвратить переопределение элементов управления WPF на уровне окна - PullRequest
0 голосов
/ 13 февраля 2019

Я использую KeyBinding в своем окне, привязанном к Command, чтобы обеспечить глобальную навигацию по TreeView особым образом (итерации по узлам третьего уровня) с использованием Page Up и Page Down.Когда TreeView или какой-либо из его элементов находятся в фокусе, нажатие Page Up или Page Down перемещается по узлам без запуска команды.Я попытался захватить PreviewKeyDown в TreeView и установить событие в Handled, но это ничего не дает.TreeView съедает ключевое событие и никогда не попадает в окно для запуска команды.Есть ли способ переопределить, как эти нажатия клавиш обрабатываются в TreeView?

XAML:

<Window>
    <Window.InputBindings>
        <KeyBinding Key="PageDown" Command="{Binding NextPageCommand}"/>
        <KeyBinding Key="PageUp" Command="{Binding PrevPageCommand}"/>
    </Window.InputBindings>
    <DockPanel>
        <TreeView ItemsSource="{Binding Path=Documents}"
                  PreviewKeyDown="tv_OnPreviewKeyDown">
            <TreeView.ItemTemplate>
                <!--Unimportant hierarchical templates-->
            </TreeView.ItemTemplate>
        </TreeView>
    </DockPanel>
</Window>

CodeBehind:

private void tv_OnPreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.PageDown || e.Key == Key.PageUp)
    e.Handled = true
}

Я нашел, что могу обойтиэто путем повторного выделения InputBinding s на уровне TreeView, но действительно ли это лучший способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...