2017-02-22 30 views
1

ListBoxにはSelectionMode="Extended"があります。最後の項目の選択を解除するには、ctrlをクリックしてください。私はそれ以外のExtended選択モードの動作を変更しないでアイテムをクリックするだけでアイテムを選択解除できるようにしたいと考えています。ListBoxの拡張選択モードでのシングルクリックでの選択解除

私はこのトピックについてone questionしか見つかりませんでしたが、実際には別の目標があります(ListBoxの外側をクリックしてすべてのアイテムを選択解除できるようになりました)。

+1

基本的に、選択したアイテムをクリックするとそのアイテムを選択解除する必要がありますか? – mm8

+0

@ mm8はい。私の質問で十分に明確ではないと思うなら、それを自由に編集してください。残念ながら私は時には、実際にはそうではないものの、誰もが理解しやすいはずのものを感じます。 –

答えて

1

私はあなたの条件を理解していれば、正しくおListBoxItemコンテナのPreviewMouseLeftButtonDownイベントを処理することができ、それがすでに選択されている場合は、それを選択解除:

<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キーを使用せずにアイテムの選択を解除します。

関連する問題