4

下キーと上キー(方向行)をキャプチャしようとしていますが、このキーを押してもイベントキーダウンが発生しません。

ただし、他のキーを押すと、イベントが発生します。たとえば、numlockがキャッチされます。行キーは特別なキーですか?

MVVMLightを使用してイベントをコマンドに変換し、KeyEventArgsを渡します。

ありがとう。

編集:いくつかのコードを追加します

上手。本当に私はコンボボックスを持っていて、編集可能なので、コンボボックス内にテキストを書くことができます。検索オプションを有効にする方法、私が書いている間、選択が変更されます。

したがって、選択はさまざまな理由で変更される可能性があります。検索オプションのために、comboBoxで選択を変更し、マウスで選択を変更し、矢印キーで選択を変更できます。

どちらが選択変更の理由なのか知りたいのですが。したがって、コンボボックスで下矢印キーまたは上矢印キーを押すタイミングを知る必要があります。

私はこのコードを持っています:

AXML

<ComboBox DisplayMemberPath="Type" Height="23" HorizontalAlignment="Left" IsSynchronizedWithCurrentItem="True" Margin="0,16,0,0" Name="cmbType" VerticalAlignment="Top" Width="238"
            ItemsSource="{Binding Path=Types}"
            SelectedIndex="{Binding Path=TypesIndex}" IsEditable="True"
            Text="{Binding TypesText}">

            <i:Interaction.Triggers>
                <i:EventTrigger EventName="PreviewKeyDown">
                    <cmd:EventToCommand Command="{Binding TypesPreviewKeyDownCommand, Mode=OneWay}" PassEventArgsToCommand="True" />
                </i:EventTrigger>    
                <i:EventTrigger EventName="SelectionChanged">
                    <cmd:EventToCommand Command="{Binding TypesSelectionChangedCommand, Mode=OneWay}" CommandParameter="{Binding ElementName=cmbTypes, Path=SelectedItems}" />
                </i:EventTrigger>    
            </i:Interaction.Triggers>
        </ComboBox>

私のviewModelでは:

private RelayCommand<KeyEventArgs> _typesPreviewKeyDownCommand = null;
        public RelayCommand<KeyEventArgs> typesPreviewKeyDownCommand
        {
            get
            {
                if (_typesPreviewKeyDownCommand == null)
                {
                    _typesPreviewKeyDownCommand = new RelayCommand<KeyEventArgs>(typesPreviewKeyDownCommand);
                }
                return _typesPreviewKeyDownCommand;
            }
        }





private void typesPreviewKeyDownCommand(KeyEventArgs e)
        {
            if (e.Key == Key.Down || e.Key == Key.Up)
            {
                //my code
            }
            else
            {
                //more code
            }
        }
4

1 に答える 1

3

もう関連性があるかどうかはわかりませんが、DatePickerでの非常によく似た問題/動作のアップ/ダウン動作について説明しているCodeProjectに関する記事があります

i:Interaction記事が示唆しているように、コードビハインドで処理するのは非常に簡単ですが、MVVMスタイルで処理する場合は、またはを使用する必要がありますInputBindings。mvvm-lightと組み合わせると、インタラクションの方がうまくいくようですがInputBindings、上/下キーが機能しないことがわかりましたが、ALTなどの修飾子を使用すると機能します。

コメントが言ったように、それはおそらくあなたに届く前にどこかで処理されています。PreviewKeyDown(これが、ではなくを使用したい理由ですKeyDown)。

于 2013-10-07T04:46:50.143 に答える