我的窗口中有TextBox
和ListView
,我想在ListView
有焦点的同时上下移动TextBox
的选择:
但是,我似乎没有得到我的CommandTarget
声明,他们被忽略了。 MSDN says这是非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>
答案 0 :(得分:1)
实际上,由于RoutedUICommand派生自RoutedCommand,它们都支持命令目标(MSDN实际上说命令目标仅适用于RoutedCommands,但它意味着它不适用于其他ICommand派生对象)。
您是否实际将提到的ComponentCommands(MoveDown和MoveUp)绑定到代码后面的ListView中? ListView在首次创建时没有命令绑定,因此您需要执行以下操作:
AllItemsList.CommandBindings.Add(new CommandBinding(ComponentCommands.MoveDown, ExecuteMoveDown));
然后你必须编写你的ExecuteMoveDown函数来进行移动。