2011-03-08 75 views
0

好吧,我有一个列表框,并有一个ListBoxItem的定义触发如下:WPF框滚动使用键盘问题

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

这,只要我提出我的鼠标移到它就会选择一个ListBoxItem的正常工作。当我尝试用键盘向下箭头滚动列表时出现问题。 因此,假设我的鼠标已经在列表中的第三个项目上,并且默认选择了这些项目。现在,当我按下向下箭头时,第一项被选中!此外,当保持按下向下箭头时,只要可见列表在选择移动到之前未查看的项目时就会正确滚动,则选择将放回到鼠标停留在其上的项目并从其开始滚动在那里!......换句话说,当鼠标不在列表框中时,键盘滚动工作正常......我真希望自己清楚。

我可能会做一些愚蠢的在这里和任何建议,欢迎 感谢

回答

0

哇,这是一个最有趣的触发:)

此行为是一种意料之中的,因为所选择的项目是由聚焦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); 

将上述任何静态构造函数。这是粗糙的,但为我工作。