Wpf列表框滚动与键盘问题

Wpf列表框滚动与键盘问题,wpf,wpf-controls,Wpf,Wpf Controls,好的,我有一个listbox,并为listboxitem定义了一个触发器,如下所示: <DataTrigger Binding="{Binding IsMouseOver,RelativeSource={RelativeSource Self}}" Value="True"> <Setter Property="IsSelected" Value="True" /> </DataTrigger> 只要我将鼠标移到listboxitem上,它就

好的,我有一个listbox,并为listboxitem定义了一个触发器,如下所示:

 <DataTrigger Binding="{Binding IsMouseOver,RelativeSource={RelativeSource Self}}" Value="True">
   <Setter Property="IsSelected" Value="True" />
  </DataTrigger>

只要我将鼠标移到listboxitem上,它就会被选中。当我尝试用键盘向下箭头滚动列表时,问题就出现了。 因此,假设我的鼠标位于列表中的第三项上,并且默认情况下处于选中状态。现在,当我按下向下箭头时,第一项被选中!此外,当我按住向下箭头时,只有可查看列表在选择移动到以前未显示的项目时正确滚动,选择将放回鼠标所在的项目上,并从那里开始滚动!。。。换句话说,当鼠标完全不在列表框上时,键盘滚动效果很好……我真的希望我说清楚了

我可能在做一些愚蠢的事情,欢迎任何建议
谢谢

哇,这是一个非常有趣的触发器:)

这种行为是意料之中的,因为ListBoxItem会聚焦所选项目,并且当滚动条更新鼠标下方新项目的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);
将上述内容放入任何静态构造函数中。这是粗糙的,但对我有用