Извините, что воскресил эту тему ...
Но принятый ответ не полностью покрывал все мои потребности, поэтому я немного его улучшил. У меня есть десятки ListBox
, и все это нуждается в этом невыборе при поведении клика .
Из-за этого я создал пользовательский элемент управления, переопределив SelectionModeProperty
(установив его значение по умолчанию SelectionMode.Multiple
), а также автоматически отслеживая событие SelectionChanged
. Давайте покажем код:
public class UnselectableListBox : ListBox
{
public UnselectableListBox() : base()
{
SelectionChanged += new SelectionChangedEventHandler((sender, e) =>
{
if (e.AddedItems.Count > 0)
{
var last = e.AddedItems[0];
foreach (var item in new ArrayList(SelectedItems))
if (item != last) SelectedItems.Remove(item);
}
});
}
static UnselectableListBox()
{
SelectionModeProperty.OverrideMetadata(typeof(UnselectableListBox),
new FrameworkPropertyMetadata(SelectionMode.Multiple));
}
}
Тогда мне нужно только заменить мой XAML на:
<local:UnselectableListBox ... />
Больше не нужно кодировать SelectionChanged
для каждого ListBox
на каждом Window
.