2013-08-26 3 views
1

내 usercontrol에 ListboxItems로 이미지가있는 Listbox가 있습니다. 여기에 "Arrow Keys"를 사용하여 목록 상자 항목 (이미지)을 탐색 할 때 문제가 발생합니다. 다음에있는 항목을 탐색 할 수 없습니다. 행, 말은 예를 들어, 목록 상자 이미지의 행이 포함 * 내가 마우스 오른쪽 버튼을 사용하여 이미지를 탐색 할 경우 *, 내가 다음 행으로 이동할 수 캔트 키 화살 (를 "나는 WrapPanel 사용했다"),화살표 키를 사용하여 listboxitem을 탐색하십시오.

<ListBox.ItemContainerStyle> 
    <Style TargetType="{x:Type ListBoxItem}"> 
    <Setter Property="KeyboardNavigation.DirectionalNavigation" Value="Cycle" /> 
    <Setter Property="IsTabStop" Value="True" /> 
    </Style> 
</ListBox.ItemContainerStyle> 

답변

2

this answer을 기반으로 거의 효과가 있었지만별로 좋지는 않았습니다.

ListBox에 KeyDown 이벤트를 넣고 오른쪽 또는 왼쪽 키 누르기가 표시되면 ItemsCollection을 사용하여 다음 또는 이전 요소를 선택하십시오.

키보드 포커스 (점선)가 아닌 선택 영역을 이동하므로 키보드 포커스가있는 요소에서 MoveFocus을 호출해야합니다.

private void ListBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    var list = sender as ListBox; 
    switch(e.Key) 
    { 
     case Key.Right: 
      if(!list.Items.MoveCurrentToNext()) list.Items.MoveCurrentToLast(); 
      break; 

     case Key.Left: 
      if(!list.Items.MoveCurrentToPrevious()) list.Items.MoveCurrentToFirst(); 
      break; 
    } 

    e.Handled = true; 
    if(list.SelectedItem != null) 
    { 
     (Keyboard.FocusedElement as UIElement).MoveFocus(new TraversalRequest(FocusNavigationDirection.Next)); 
    } 
} 

마지막으로 ListBox에 IsSynchronizedWithCurrentItem="True"이 있는지 확인하십시오.

원하는 랩 어라운드 동작을 제공합니다.

+0

, 고맙습니다 ye 답장을 위해, 내 프로젝트에서 keydown/keypres..etc, 다른 응용 프로그램 인 windowsAPI 수준을 처리하고 있습니다. 따라서 Keydown 이벤트를 내 응용 프로그램에 맞게 작성할 수 없습니다. XAML 자체에서 수행되도록하려면 XAML 파일에서 수행 할 수 있습니까? – Selva

+0

XAML에서만 어떻게 수행 할 수 있는지 (또는 가능한지) 알 수 없습니다. – josh2112

관련 문제