2

我的窗口中有 aTextBox和 a ListView,我想ListView在焦点集中时上下移动 ' 的选择TextBox

在此处输入图像描述

但是,我似乎没有理解我的CommandTarget声明,它们被忽略了。MSDN 说这是 non- 的默认行为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 实际上说命令目标仅适用于 RoutedCommands,但这意味着它不适用于其他 ICommand 派生对象)。

您是否真的在后面的代码中将提到的 ComponentCommands(MoveDown 和 MoveUp)绑定到 ListView 中?ListView 首次创建时没有命令绑定,因此您需要执行以下操作:

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

然后,您必须编写 ExecuteMoveDown 函数来进行移动。

于 2011-07-20T17:00:29.757 回答