4

在我的代码的 MainView 中,我有这个事件来捕获 keyDown:

#region Constructor
PreviewKeyDown += SoftKeyMainPreviewKeyDown;
#endregion

private void SoftKeyMainPreviewKeyDown(object sender, KeyEventArgs e)
{
        var focusedElement = Keyboard.FocusedElement;
        switch (e.Key)
        {
            case Key.Up:
                DoSomething();
                break;
            .....
        }
}

现在我想将它移到 XAML 中的 InputBindings 中。

我的第一次尝试:

<UserControl.InputBindings>
    <KeyBinding Gesture="Up" Command="{Binding ElementName=_MaschinenView, Path=UpCommand}" />
    ....
</UserControl.InputBindings>

代码隐藏:

public ICommand UpCommand { get; set; }

UpCommand = new SimpleCommand { ExecuteDelegate = delegate { MoveFocusInDirection(Keyboard.FocusedElement, new TraversalRequest(FocusNavigationDirection.Up)); } };

没有任何事情发生。很可能 KeyDown-Event 由 Child-Element 处理。

是否可以在 InputBindings 中的 XAML 中设置 previewkeydown?而如何做到这一点呢?

4

1 回答 1

1

您是否尝试过使用 Key 属性而不是 Gesture?像这样:

<UserControl.InputBindings>
    <KeyBinding Key="Up" Command="{Binding ElementName=_MaschinenView, Path=UpCommand}" />
    ....
</UserControl.InputBindings>
于 2012-11-15T11:57:45.690 回答