2017-03-27 79 views
0

我有一個WPF桌面應用程序,其中包含一些ListView項目。WPF:使用鍵盤導航和選擇ListView項目

我想用鼠標單擊某個項目或使用鍵盤選擇該項目並且用戶單擊「Enter」時收到通知。 所需的行爲與現代Windows 10 UI上的「設置」相似)或右側項目的行爲

SelectionChanged不適用於我,因爲當用戶使用鍵盤導航時,我只需要在點擊「Enter」時執行操作。

有沒有一個標準的做法呢?我可以捕捉按鍵/鼠標事件,但它看起來像一個可疑的解決方案。

回答

1

有沒有一個標準的方法呢?

不是。你所描述的不是標準行爲。

由於在ListView的項目實際上被選爲按上下鍵在鍵盤上(不按ENTER),你真的沒有其他選擇,而不是處理一個鍵和鼠標事件我很害怕。

但是這應該是一個很容易實現的東西。例如,您可以處理ListViewItem容器的ListViewPreviewMouseLeftButtonDown事件的PreviewKeyDown事件。

請參考以下示例代碼。

<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

Settings應用程序是一個UWP應用程序,它當然不使用WPF ListView控件。所以不,你必須自己實現這個功能。 – mm8

+0

這是UWP好吧,但「檢查」工具顯示它有一個ListView類。那是另一個嗎? – Sambusak