2011-03-08 90 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); 

將上述任何靜態構造函數。這是粗糙的,但爲我工作。