Eu tenho um ListView WPF simples e uma pergunta simples:
É possível desligar a seleção, para que quando o usuário clica na linha, a linha não seja destacada?
Gostaria que a linha 1 se parecesse com a linha 0 quando clicada.
Possivelmente relacionado: posso estilizar a aparência do foco / seleção? Por exemplo. para substituir a aparência do gradiente azul (linha 3) por uma cor sólida personalizada. Eu encontrei isso e isso , infelizmente não ajudando.
(Conseguir o mesmo sem usar ListView também é aceitável. Gostaria apenas de poder usar rolagem lógica e virtualização de IU como o ListView faz)
O XAML para 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>
Respostas:
De acordo com o comentário de Martin Konicek, para desativar totalmente a seleção dos itens da maneira mais simples:
No entanto, se você ainda precisa da funcionalidade do ListView, como ser capaz de selecionar um item, você pode desativar visualmente o estilo do item selecionado da seguinte maneira:
Você pode fazer isso de várias maneiras, desde alterar o ControlTemplate do ListViewItem até apenas definir um estilo (muito mais fácil). Você pode criar um estilo para ListViewItems usando o ItemContainerStyle e 'desligar' o pincel de fundo e borda quando estiver selecionado.
Além disso, a menos que você tenha alguma outra maneira de notificar o usuário quando o item é selecionado (ou apenas para teste), você pode adicionar uma coluna para representar o valor:
fonte
BasedOn="{StaticResource {x:Type ListViewItem}}"
para que não substituísse o resto dos meus estilos de grade, mas também acho que você deve fazer seu comentário como a resposta aceitaA resposta de Moore não funciona, e a página aqui:
Especificando a Cor de Seleção, Alinhamento de Conteúdo e Cor de Fundo para itens em uma ListBox
explica por que não pode funcionar.
Se o seu listview contém apenas texto básico, a maneira mais simples de resolver o problema é usar pincéis transparentes.
Isso produzirá resultados indesejáveis se as células do listview estiverem segurando controles como caixas de combinação, uma vez que também muda sua cor. Para resolver este problema, você deve redefinir o modelo do controle.
fonte
Defina o estilo de cada ListViewItem para ter Focusable definido como false.
fonte
Este é o modelo padrão para ListViewItem do Blend:
Modelo ListViewItem padrão:
Basta remover o IsSelected Trigger e o IsSelected / IsSelectionActive MultiTrigger, adicionando o código abaixo ao seu estilo para substituir o modelo padrão e não haverá nenhuma mudança visual quando selecionado.
Solução para desativar as alterações visuais da propriedade IsSelected:
fonte
A maneira mais fácil que encontrei:
fonte
ListView.ItemContainerStyle
!Na sequência da solução acima ... Eu usaria um MultiTrigger para permitir que os destaques do MouseOver continuem a funcionar após a seleção, de modo que o estilo do seu ListViewItem seja:
fonte
Ok, um pouco tarde para o jogo, mas nenhuma dessas soluções fez exatamente o que eu estava tentando fazer. Essas soluções têm alguns problemas
Eu queria um ListView com os cabeçalhos de agrupamento, e cada ListViewItem deveria ser apenas 'informativo' sem seleção ou foco, mas o ListViewItem tem um botão que eu desejo que possa ser clicado e passar o mouse.
Então, realmente o que eu quero é que o ListViewItem não seja um ListViewItem, então, eu mudei o ControlTemplate do ListViewItem e apenas o tornei um ContentControl simples.
fonte
Uma das propriedades do listview é
IsHitTestVisible
. Desmarque-o.fonte
IsHitTestVisible
o botão não pode ser clicado. Ele age comoIsEnabled = false;
Isso é para outras pessoas que podem encontrar os seguintes requisitos:
Se você é como eu (usando WPF com .NET 4.5) e descobriu que as soluções que envolvem gatilhos de estilo simplesmente não funcionavam, aqui está minha solução:
Substitua o ControlTemplate do ListViewItem em um estilo:
..E o DataTemplate:
Resulta nisso em tempo de execução (item 'B' é selecionado, item 'D' passa o mouse):
fonte
Use o código abaixo:
fonte
O código abaixo desabilita a seleção de linha ListViewItem e também permite adicionar preenchimento, margem etc.
fonte
O código abaixo desativa o foco em ListViewItem
fonte