У меня есть несколько входных привязок в окне:
<Window.InputBindings>
<KeyBinding Key="Space" Command="{Binding Path=StepNext}" />
<KeyBinding Key="R" Command="{Binding Path=ResetSong}" />
<KeyBinding Key="Left" Command="{Binding Path=StepPrevious}" />
</Window.InputBindings>
Команды определены в моей модели представления как RelayCommands:
public class RelayCommand : ICommand
{
private Action<object> _exec;
private Func<object, bool> _canExec;
public RelayCommand(Action<object> exec, Func<object, bool> canExec)
{
_exec = exec;
_canExec = canExec;
}
public void Execute(object parameter)
{
_exec(parameter);
}
public bool CanExecute(object parameter)
{
return _canExec(parameter);
}
public event EventHandler CanExecuteChanged;
}
В конструкторе ViewModel:
StepNext = new RelayCommand(DoStepNext, CanStepNext);
Это отлично работает.Однако всякий раз, когда я выбираю элемент в списке (который является дочерним элементом окна), привязки клавиш перестают работать.Как я могу заставить родителя захватывать сочетания клавиш независимо от того, какой ребенок имеет фокус (если есть).(разве события не должны всплыть?)
Я знаю, что есть событие PreviewKeyDown, которое делает именно это, но это сделает мои ICommand
бесполезными, поэтому я бы предпочел декларативноеРешение, если это возможно.
Заранее спасибо.