Отмена выбора на поле списка WPF с расширенным режимом выбора

И еще один ответ, более компактный (для разработчиков Java) attr_accessor :x создает геттеры и сеттеры, чтобы @x

class MyClassA
  attr_accessor :x
end

был такой же, как

class MyClassB
  def x=(value) #java's typical setX(..)
    @x=value
  end
  def x
    @x
  end
end
5
задан Dave Clemmer 1 August 2011 в 16:11
поделиться

1 ответ

Добавить функцию отмены выделения не так уж и плохо, и вы на правильном пути. Основная проблема заключается в том, что по умолчанию ListBoxItems внутри ListBox растягивается на всю длину, что затрудняет , а не щелчок по одному.

Вот пример ListBox, который изменяет стиль ItemContainerStyle по умолчанию, чтобы элементы просто занимают левую часть списка, и между ними есть некоторый интервал.

<ListBox SelectionMode="Extended"
         Width="200" Mouse.MouseDown="ListBox_MouseDown">
    <ListBox.ItemContainerStyle>
        <Style TargetType="{x:Type ListBoxItem}">
            <Setter Property="Background"
                    Value="LightBlue" />
            <Setter Property="Margin"
                    Value="2" />
            <Setter Property="Padding"
                    Value="2" />
            <Setter Property="Width"
                    Value="100" />
            <Setter Property="HorizontalAlignment"
                    Value="Left" />
        </Style>
    </ListBox.ItemContainerStyle>
    <ListBoxItem >Item 1</ListBoxItem>
    <ListBoxItem >Item 2</ListBoxItem>
    <ListBoxItem >Item 3</ListBoxItem>
    <ListBoxItem >Item 4</ListBoxItem>
</ListBox>

Чтобы отменить выбор выбранных элементов, нам просто нужно установить для SelectedItem значение null в EventHandler. Когда мы нажимаем на ListBoxItem, он обрабатывает MouseDown / Click и т. Д., Чтобы установить SelectedItem или изменить SelectedItems. Из-за этого и характера RoutedEvents мы просто обрабатываем MouseDown в ListBox именно тогда, когда хотим. Когда где-то внутри ListBox щелкают, что не является частью элемента.

private void ListBox_MouseDown(object sender, MouseButtonEventArgs e)
{
    (sender as ListBox).SelectedItem = null;
}
3
ответ дан 14 December 2019 в 13:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: