WPF:ListBox或Panel负责鼠标滚轮导航吗?

时间:2009-03-17 09:19:52

标签: wpf listbox navigation mouse panel

我有一个自定义ListBox,它使用自定义Panel作为ItemsHost。我希望控制鼠标滚轮输入,这样转动滚轮就会改变单个选定的项目。

我认为最好的方法是处理OnPreviewMouseWheel事件(虽然这只是我想要的,因为它不提供水平滚轮数据)。

现在最大的问题是:是否有最佳实践可以处理OnPreviewMouseWheel?在ListBox中(默认情况下没有关于Panel的子元素排列的线索)或在Panel中(默认情况下它没有关于它的子元素的“IsSelected”属性的线索)?

2 个答案:

答案 0 :(得分:0)

我认为你应该从ListBox开始。 ListBox继承自Selector,它处理与选择有关的所有事情。

鼠标滚轮选择行为适用于任何类型的Panel(首先使用标准ListBox实现它可能是个好主意),您可能希望使用{{1在Panel之外的某个地方,选择逻辑是没有意义的。

答案 1 :(得分:0)

应该从ListBox完成,因为它只知道当前选择的项目。专家组不希望或不需要知道它是否被选中。

我建议将其作为附加行为实现,以便您可以多次重复使用该功能。

要做到这一点:
- 使用名为MouseWheelChangesSelection(true / false)的附加属性创建一个新类(可能称为ListBoxSelector)。
- 添加PropertyNotifyChangedEvent,并在更改属性时为PreviewMouseWheel / MouseWheel事件注册事件侦听器。

您可以通过以下任一方式更改当前选定的项目:
- 递增所选索引;或
- 使用集合视图源的移动上一个/下一个