У меня есть простой WPF ListView и простой вопрос:
Можно ли отключить выделение, чтобы, когда пользователь щелкал строку, строка не выделялась?
Я бы хотел, чтобы строка 1 выглядела так же, как строка 0 при нажатии.
Возможно, связано: могу ли я стилизовать внешний вид наведения / выделения? Например. для замены синего градиента при наведении курсора (строка 3) на пользовательский сплошной цвет. Я обнаружил, что это и это , к сожалению, не помогает.
(Достижение того же без использования ListView тоже приемлемо. Я просто хотел бы иметь возможность использовать логическую прокрутку и виртуализацию пользовательского интерфейса, как это делает ListView)
XAML для ListView:
<ListView Height="280" Name="listView">
<ListView.Resources>
<!-- attempt to override selection color -->
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightColorKey}"
Color="Green" />
</ListView.Resources>
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
<!-- more columns -->
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
Ответы:
Комментарий Мартина Коничека, чтобы полностью отключить выбор элементов самым простым способом:
Однако, если вам по-прежнему требуются функциональные возможности ListView, такие как возможность выбора элемента, вы можете визуально отключить стилизацию выбранного элемента следующим образом:
Вы можете сделать это несколькими способами, от изменения ControlTemplate ListViewItem до простой установки стиля (намного проще). Вы можете создать стиль для ListViewItems с помощью ItemContainerStyle и «выключить» фон и кисть границы, когда они выбраны.
Кроме того, если у вас нет другого способа уведомить пользователя о выборе элемента (или просто для тестирования), вы можете добавить столбец для представления значения:
источник
BasedOn="{StaticResource {x:Type ListViewItem}}"
чтобы он не перекрывал остальные мои стили сетки, но я также думаю, что вы должны сделать свой комментарий принятым ответомОтвет Мура не работает, и страница здесь:
Указание цвета выделения, выравнивания содержимого и цвета фона для элементов в ListBox
объясняет, почему это не может работать.
Если ваш список содержит только базовый текст, простейший способ решить проблему - использовать прозрачные кисти.
Это приведет к нежелательным результатам, если ячейки списка содержат элементы управления, такие как поля со списком, поскольку они также меняют их цвет. Чтобы решить эту проблему, необходимо переопределить шаблон элемента управления.
источник
Установите для стиля каждого ListViewItem значение false для Focusable.
источник
Вот шаблон по умолчанию для ListViewItem из Blend:
Шаблон ListViewItem по умолчанию:
Просто удалите триггер IsSelected и IsSelected / IsSelectionActive MultiTrigger, добавив приведенный ниже код в свой стиль, чтобы заменить шаблон по умолчанию, и при выборе не будет никаких визуальных изменений.
Решение для отключения визуальных изменений свойства IsSelected:
источник
Самый простой способ нашел:
источник
ListView.ItemContainerStyle
!В дополнение к приведенному выше решению ... я бы использовал MultiTrigger, чтобы подсветка MouseOver продолжала работать после выбора, так что ваш стиль ListViewItem будет:
источник
Хорошо, немного поздно в игре, но ни одно из этих решений не помогло в полной мере то, что я пытался сделать. У этих решений есть пара проблем
Мне нужен ListView с группирующими заголовками, и каждый ListViewItem должен быть просто «информационным» без выбора или наведения, но у ListViewItem есть кнопка в нем, которую я хочу, чтобы ее можно было щелкнуть и навести указатель мыши.
Итак, на самом деле я хочу, чтобы ListViewItem вообще не был ListViewItem. Итак, я перешел на ControlTemplate ListViewItem и просто сделал его простым ContentControl.
источник
Одно из свойств списка -
IsHitTestVisible
. Снимите галочку.источник
IsHitTestVisible
кнопку нельзя будет нажать. Это действует какIsEnabled = false;
Это для тех, кто может столкнуться со следующими требованиями:
Если вы похожи на меня (используете WPF с .NET 4.5) и обнаружили, что решения, включающие триггеры стиля, просто не работают, вот мое решение:
Замените ControlTemplate ListViewItem в стиле:
..И DataTemplate:
В результате во время выполнения (выбран элемент «B», элемент «D» наведен указателем мыши):
источник
Используйте приведенный ниже код:
источник
Код ниже отключает выбор строки ListViewItem, а также позволяет добавлять отступы, поля и т. Д.
источник
Ниже кода отключить фокус на ListViewItem
источник