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 イベントは子要素によって処理されます。

InputBindings の XAML で previewkeydown を設定することは可能ですか? そして、これはどのように達成できますか?

4

1 に答える 1

1

Gesture の代わりに Key プロパティを使用してみましたか? このような:

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