2017-02-22 50 views
1

我有一個ListBoxSelectionMode="Extended"。您只能通過按住ctrl並單擊它來取消選擇最後一個項目。我希望能夠在不改變Extended選擇模式以外的行爲的情況下點擊它而取消選擇該項目。在具有擴展選擇模式的列表框中單擊取消選擇

我只發現one question關於此主題,它實際上有一個不同的目標(可以通過單擊ListBox以外的地方點擊取消所有項目)。

+1

所以基本上你想要點擊一個選定的項目應該取消選擇它,對吧? – mm8

+0

@ mm8是的。如果您認爲我的問題還不夠清楚,請隨時編輯它。不幸的是,我有時覺得我寫的東西應該很容易被大家理解,而事實上並非如此。 –

回答

1

如果我理解您的要求正確,你可以處理PreviewMouseLeftButtonDown事件的ListBoxItem容器,如果它已經選擇去選擇它:

<ListBox SelectionMode="Extended"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <EventSetter Event="PreviewMouseLeftButtonDown" Handler="OnMouseLeftButtonDown"/> 
     </Style> 
    </ListBox.ItemContainerStyle> 
    <ListBoxItem>1</ListBoxItem> 
    <ListBoxItem>2</ListBoxItem> 
    <ListBoxItem>3</ListBoxItem> 
</ListBox> 

private void OnMouseLeftButtonDown(object sender, MouseEventArgs e) 
{ 
    ListBoxItem lbi = sender as ListBoxItem; 
    if (lbi != null) 
    { 
     if (lbi.IsSelected) 
     { 
      lbi.IsSelected = false; 
      e.Handled = true; 
     } 
    } 
} 

這應該讓你能取消選擇一個項目而不使用CTRL鍵。

相關問題