WPF ListView отключает выбор

У меня есть простой WPF ListView и простой вопрос:

Можно ли отключить выбор, поэтому, когда пользователь нажимает на строку, строка не подсвечивается?

Посмотреть список

Я бы хотел, чтобы строка 1 выглядела так же, как строка 0 при нажатии.

Возможно, связано: могу ли я нарисовать вид наведения / выбора? Например. чтобы заменить вид зависания синего gradleиента (строка 3) с обычным сплошным цветом. Я нашел это и это , к сожалению, не помогаю.

(Достижение того же, без использования ListView, тоже приемлемо. Я просто хотел бы использовать логическую прокрутку и виртуализацию пользовательского интерфейса, как это делает ListView)

XAML для ListView:

              

По словам Мартина Коницэка, чтобы полностью отключить выбор предметов самым простым способом:

     ...  

Однако, если вам все еще требуется функциональность ListView, например, возможность выбора элемента, вы можете визуально отключить стилирование выбранного элемента следующим образом:

Вы можете сделать это несколькими способами, от изменения ControlTemplate ListViewItem до просто установки стиля (намного проще). Вы можете создать стиль для ListViewItems, используя ItemContainerStyle и «выключить» фон и кисть границы, когда она будет выбрана.

     ...  

Кроме того, если у вас нет другого способа уведомления пользователя, когда элемент выбран (или просто для тестирования), вы можете добавить столбец для представления значения:

  

Ответ Мура не работает, и страница здесь:

Указание цвета выделения, выравнивания содержимого и цвета фона для элементов в ListBox

объясняет, почему он не может работать.

Если ваш список содержит только основной текст, самым простым способом решения проблемы является использование прозрачных кистей.

    

Это приведет к нежелательным результатам, если ячейки listview содержат элементы управления, такие как comboboxes, так как они также меняют цвет. Чтобы решить эту проблему, вы должны переопределить шаблон элемента управления.

     

Задайте стиль каждого элемента ListViewItem, если значение параметра Focusable установлено равным false.

      

Вот шаблон по умолчанию для ListViewItem из Blend:

Шаблон по умолчанию ListViewItem:

                            

Просто удалите IsSelected Trigger и IsSelected / IsSelectionActive MultiTrigger, добавив нижеприведенный код в свой стиль, чтобы заменить шаблон по умолчанию, и при его выборе визуальное изменение не будет.

Решение отключить визуальные изменения свойства IsSelected:

                

Самый простой способ найти:

  

В дополнение к решению выше … Я бы использовал MultiTrigger, чтобы подсветка MouseOver продолжала работать после выбора, так что стиль ListViewItem будет:

     

Одним из свойств списка является IsHitTestVisible . Снимите флажок.

Хорошо, немного поздно к игре, но ни один из этих решений не сделал то, что я пытался сделать. У этих решений есть пара проблем

  1. Отключите ListViewItem, который закручивает стили и отключает все элементы управления детьми
  2. Удалите из стека хитов, т. Е. Элементы управления детьми никогда не получат щелчок мышью или нажмите
  3. Сделать это не фокусируемым, это просто не работает для меня?

Мне нужен ListView с заголовками группировки, и каждый ListViewItem должен просто быть «информационным» без выбора или наведения, но в ListViewItem есть кнопка, в которой я хочу быть нажатой и иметь зависание.

Итак, действительно, я хочу, чтобы ListViewItem не был ListViewItem вообще, поэтому я перешел на ControlTemplate ListViewItem и просто сделал его простым ContentControl.

    

Используйте приведенный ниже код:

     

Это относится к тем, кто может столкнуться со следующими требованиями:

  1. Полностью замените визуальную индикацию «selected» (например, используйте какую-то форму), за исключением изменения цвета стандартного выделения
  2. Включите эту выбранную индикацию в DataTemplate вместе с другими визуальными представлениями вашей модели, но,
  3. Не хотите добавлять свойство «IsSelectedItem» в class модели и быть обремененным ручным манипулированием этим свойством на всех объектах модели.
  4. Требовать от элементов, которые можно выбрать в ListView
  5. Также хотел бы заменить визуальное представление IsMouseOver

Если вы похожи на меня (используя WPF с .NET 4.5) и обнаружили, что решения, связанные с триггерами стиля, просто не работают, вот мое решение:

Замените ControlTemplate в ListViewItem в стиле:

      

.. И DataTemplate:

          

Результаты в этом во время выполнения (элемент «B» выбран, элемент «D» имеет мышь):

Внешний вид ListView

  • Как остановить Wpf Tabcontrol, чтобы выгрузить визуальное дерево при изменении табуляции
  • Имя не существует в ошибке пространства имен в XAML
  • Есть ли способ определить, где объявляется / создается привязка WPF?
  • Почему частота кадров в WPF нерегулярна и не ограничена для мониторинга обновления?
  • В чем разница между StaticResource и DynamicResource в WPF?
  • Сделать ListView.ScrollIntoView Прокручивать элемент в центр ListView (C #)
  • Можно ли выбрать текстовый блок WPF?
  • Связывание ComboBox SelectedItem с использованием MVVM
  • Как определить, меняет ли текст TextBlock?
  • Что такое WPF Preview Events?
  • DataContext UserControl
  • Давайте будем гением компьютера.