2017-03-27 18 views
0

일부 항목이 포함 된 ListView가 포함 된 WPF 데스크탑 응용 프로그램이 있습니다.WPF : 키보드로 ListView 항목 탐색 및 선택

항목을 마우스로 클릭하거나 키보드를 사용하여 선택하고 사용자가 "Enter"를 클릭하면 알림을 받으려합니다. 필요한 동작은 최신 Windows 10 UI의 "설정"과 비슷합니다.) 또는 오른쪽 항목의 동작과 비슷합니다.

사용자가 키보드를 사용하여 탐색 할 때 SelectionChanged가 작동하지 않습니다. 그들이 "Enter"를 클릭했을 때 행동을 수행하기를 원할뿐입니다.

표준 방법이 있습니까? 나는 열쇠/마우스 이벤트를 잡을 수 있지만 생선 솔루션처럼 보인다.

답변

1

표준 방법이 있습니까?

아니요. 설명하는 것은 표준적인 동작이 아닙니다. 당신이 (ENTER를 누르지 않고) 키보드의 위, 아래 키를 누를 때 ListView의 항목 이후

은 실제로 당신이 정말로 키와 내가 두려워 마우스 이벤트를 처리하는 것보다 다른 선택의 여지가, 선택됩니다.

하지만 구현하기가 쉽습니다. 예를 들어 ListView에 대해 PreviewKeyDown 이벤트를 처리하고 ListViewItem 컨테이너에 대해 PreviewMouseLeftButtonDown 이벤트를 처리 할 수 ​​있습니다.

다음 샘플 코드를 참조하십시오.

<ListView x:Name="lv" PreviewKeyDown="lv_PreviewKeyDown"> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <EventSetter Event="PreviewMouseLeftButtonDown" Handler="lv_PreviewMouseLeftButtonDown" /> 
     </Style> 
    </ListView.ItemContainerStyle> 
</ListView> 

public MainWindow() 
{ 
    InitializeComponent(); 
    lv.ItemsSource = new List<string> { "1", "2", "3" }; 
} 

private void lv_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    MessageBox.Show((sender as ListViewItem).DataContext.ToString()); 
} 

private void lv_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Enter) 
    { 
     MessageBox.Show(lv.SelectedItem.ToString()); 
    } 
} 

그것은 "비린내"아니다

는 일부 사용자 지정 동작 :

+0

감사를 구현합니다. Windows 자체가 비슷한 동작 (현대 UI에서 언급했듯이)을 가지고 있기 때문에이를 구현하는 기본 제공 구현이 있어야한다고 생각했습니다. – Sambusak

+0

설정 앱은 UWP 앱이며 WPF ListView 컨트롤을 사용하지 않습니다. 그렇다면이 기능을 직접 구현해야합니다. – mm8

+0

UWP는 괜찮지 만 "inspect"도구는 ListView 클래스가 있음을 보여줍니다. 그거 또 하나 야? – Sambusak