2017-02-22 42 views
1

У меня есть ListBox с SelectionMode="Extended". Вы можете снять только последний элемент, удерживая ctrl, нажимая на него. Я хотел бы иметь возможность отменить выбор элемента, просто нажав на него, не изменяя поведение режима выбора , кроме этого.Снимите выделение одним щелчком мыши в ListBox с Extended SelectionMode

Я нашел только 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.

 Смежные вопросы

  • Нет связанных вопросов^_^