2

ウィンドウにaTextBoxとaがあり、フォーカスがあるときにの選択を上下ListViewに移動したいと思います。ListViewTextBox

ここに画像の説明を入力してください

しかし、私は自分の宣言を理解していないようCommandTargetです。それらは無視されます。MSDNによると、これは非のデフォルトの動作ですRoutedCommandsが、私が使用しようとしている移動コマンドはRoutedUICommandsであるため、ここではおそらく問題ではありません。

私は何かが足りないのですか?

私のXAMLは現在次のようになっています(コードビハインドは空です):

<Window x:Class="WpfTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Test Window">
    <StackPanel>
        <TextBox>
            <TextBox.InputBindings>
                <!-- for some reason, these two won't work -->
                <KeyBinding Key="Down" 
                            Command="ComponentCommands.MoveDown"
                            CommandTarget="{Binding ElementName=AllItemsList}"/>
                <KeyBinding Key="Up" 
                            Command="ComponentCommands.MoveUp"
                            CommandTarget="{Binding ElementName=AllItemsList}"/>
            </TextBox.InputBindings>
        </TextBox>
    <ListView x:Name="AllItemsList">
            <ListViewItem>Item 1</ListViewItem>
            <ListViewItem>Item 2</ListViewItem>
            <ListViewItem>Item 3</ListViewItem>
        </ListView>
    </StackPanel>
</Window>
4

1 に答える 1

1

実際、RoutedUICommandはRoutedCommandから派生しているため、どちらもコマンドターゲットをサポートしています(MSDNによると、コマンドターゲットはRoutedCommandでのみ機能するとのことですが、他のICommand派生オブジェクトでは機能しません)。

上記のComponentCommands(MoveDownおよびMoveUp)をコードビハインドのListViewに実際にバインドしましたか?ListViewは、最初に作成されたときにコマンドバインディングが空であるため、次のような操作を行う必要があります。

AllItemsList.CommandBindings.Add(new CommandBinding(ComponentCommands.MoveDown, ExecuteMoveDown));

次に、移動を行うためにExecuteMoveDown関数を作成する必要があります。

于 2011-07-20T17:00:29.757 に答える