从您的解释中可以看出一点点,但是您正在寻找:
- 当最后一个项目被选中时,导航移动到列表框之外。
- 当尝试导航超出列表中的最后一项时,导航会从列表框中弹出。
如果 ( 1 ) 是您的目标,则可能有一个合理的解决方案,使用触发器和/或一些自定义代码处理基于所选项目和所选项目更改的事件。如果是这种情况,我将不得不同意 Tom,并建议您不要以这种方式实现它,因为如果没有以编程方式删除焦点,最后一项将永远无法选择。
如果您希望这样做(2),那么根据我的经验,ListBox 的自然行为是在按下 Tab 键时移动到下一个控件,并且我也针对向下箭头键进行了测试,并且它可以工作相同。当我到达列表中的最后一项时,焦点会从列表框弹出并根据其父控件弹出到下一个控件。
更新:我必须撤回我的原始评论,因为我上面描述的行为没有描述 WPF 中 ListBox 的默认行为,但是它是您将看到我上面描述的行为的行为(我相信这是您正在寻找的行为)在实现 ItemsControl 并指定 ItemTemplate 时。看看下面的例子。
<ItemsControl ItemsSource="{Binding ElementName=TheWindow, Path=ListOStrings}">
<ItemsControl.Template>
<ControlTemplate TargetType="{x:Type ItemsControl}">
<Border BorderBrush="Magenta"
BorderThickness="1">
<ScrollViewer>
<ItemsPresenter />
</ScrollViewer>
</Border>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
碰巧,这恰好具有您描述的行为,因为列表中的每个项目的行为几乎就像一个控件,直接作为所有其他控件的对等放置。