好的,我有一个列表框,并为listboxitem定义了一个触发器,如下所示:
<DataTrigger Binding="{Binding IsMouseOver,RelativeSource={RelativeSource Self}}" Value="True">
<Setter Property="IsSelected" Value="True" />
</DataTrigger>
只要我将鼠标移到listboxitem上,它就会被选中。当我尝试用键盘向下箭头滚动列表时出现问题。 因此,假设我的鼠标位于列表中的第三个项目上,默认情况下已选中。现在,当我按下向下箭头时,第一个项目被选中!此外,当我按下向下箭头时,只有当选择移动到之前不在视图中的项目时,只有可视列表才能正确滚动,选择将被放回到鼠标所在的项目上并且滚动从那里!...换句话说,当鼠标完全不在列表框上时,键盘滚动工作正常......我真的希望自己清楚。
我可能在这里做些傻事,欢迎提出任何建议 感谢
答案 0 :(得分:0)
此行为是预期的,因为所选项目由ListBoxItem聚焦,并且当ScrollBar更新鼠标下方新项目的IsMouseOver属性更改时。
如果同时进行键盘选择,您基本上需要禁用选择鼠标下的项目:
黑客警告:
EventManager.RegisterClassHandler(typeof(ListBoxItem), ListBoxItem.SelectedEvent, new RoutedEventHandler(
(s, e) => e.Handled = (Keyboard.IsKeyDown(Key.Down) || Keyboard.IsKeyDown(Key.Up)) && (s as FrameworkElement).IsMouseOver), true);
将上述内容放在任何静态构造函数中。它很粗糙但对我有用。