2013-05-17 31 views
1

我想阻止取消選擇列表視圖項目,如果它已被選中。因此,如何防止鼠標右鍵點擊能夠取消選擇某個項目?如何禁用列表視圖項目(ListViewItem)上的右鍵選擇?

我阻止了通過在列表視圖上使用IsSwipeEnabled="False"來取消選擇的功能。我不需要列表視圖上的滑動功能。

如果需要,我很高興完全防止在列表視圖項目上單擊鼠標右鍵。

+0

我刪除了問題中的「Silverlight」標記,因爲這是與Windows運行時xaml不同的xaml風格。 –

回答

2

如果我正確地閱讀您的問題,聽起來像您希望用戶選擇項目的能力,但無法取消選擇。如果是這樣的話,這似乎是一個奇怪的要求 - 它違背了常規的UI慣例,並做了一些用戶不希望的事情。

話雖如此,您可以通過處理ListView中的SelectionChanged事件來實現。

當事件被觸發時,它會給你一個刪除(取消選擇)項目的列表。然後,您只需要添加這些項目回ListView的選擇項目列表:

private void itemListView_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    foreach (var item in e.RemovedItems) 
    { 
     itemListView.SelectedItems.Add(item); 
    } 
} 

請注意,如果你使用上面的代碼,你沒有處理任何刷卡或鼠標事件。


編輯 - 每個操作的評論,要求比我想稍有不同:

我想如果選擇不同的項目以取消選定的項目。但是我不想在已選定的項目是(手動)取消

假設你有一個選擇ListView,你仍然可以使用SelectionChanged事件和SelectionChangedEventArgs做你所要求的:

private void itemListView_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if (e.RemovedItems.Count > 0 && e.AddedItems.Count == 0) 
    { 
     var removed = e.RemovedItems[0]; 
     itemListView.SelectedItem = removed; 
    } 
} 
+0

你錯過了一個'if(e.AddedItems.Count == 0)'或類似的東西 – WiiMaxx

+0

@WiiMaxx - 代碼正常工作 - 我測試了它。 –

+0

哦,我的錯誤,我誤解了這個問題。我以爲他只想這樣如果用戶取消選擇所有項目。所以+1 :) – WiiMaxx

1

我在以下forum上找到了一個簡單的解決方案。

您只需將一個RightTapped事件添加到ListView DataTemplate內容。

<ListView> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
     <ContentPresenter RightTapped="daves_RightTapped" /> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

然後在後面的代碼:

private void daves_RightTapped(object sender, Windows.UI.Xaml.Input.RightTappedRoutedEventArgs e) 
    { 
     e.Handled = true; 
    } 

能正常工作在Outlook風格的ListView。

相關問題