Tengo un ListView de WPF simple y una pregunta simple:
¿Es posible desactivar la selección, por lo que cuando el usuario hace clic en la fila, la fila no se resalta?
Me gustaría que la fila 1 se pareciera a la fila 0 cuando se hace clic en ella.
Posiblemente relacionado: ¿puedo diseñar el aspecto del desplazamiento / selección? P.ej. para reemplazar el aspecto azul degradado flotante (línea 3) con un color sólido personalizado. He encontrado esto y esto , desafortunadamente no ayudando.
(También es aceptable lograr lo mismo sin usar ListView. Me gustaría poder usar el desplazamiento lógico y la virtualización de la interfaz de usuario como lo hace ListView)
El XAML para ListView es:
<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>
Respuestas:
Según el comentario de Martin Konicek, para desactivar completamente la selección de los elementos de la manera más simple:
Sin embargo, si aún necesita la funcionalidad de ListView, como poder seleccionar un elemento, puede deshabilitar visualmente el estilo del elemento seleccionado de esta manera:
Puede hacer esto de varias maneras, desde cambiar la ControlTemplate de ListViewItem hasta simplemente establecer un estilo (mucho más fácil). Puede crear un estilo para ListViewItems usando ItemContainerStyle y 'apagar' el fondo y el pincel de borde cuando está seleccionado.
Además, a menos que tenga alguna otra forma de notificar al usuario cuando se selecciona el elemento (o solo para probar), puede agregar una columna para representar el valor:
fuente
BasedOn="{StaticResource {x:Type ListViewItem}}"
para que no anulara el resto de mis estilos de cuadrícula, pero también creo que deberías hacer que tu comentario sea la respuesta aceptadaLa respuesta de Moore no funciona, y la página aquí:
Especificar el color de selección, la alineación del contenido y el color de fondo para los elementos de un ListBox
explica por qué no puede funcionar.
Si su vista de lista solo contiene texto básico, la forma más sencilla de resolver el problema es utilizando pinceles transparentes.
Esto producirá resultados no deseados si las celdas de la vista de lista contienen controles como cuadros combinados, ya que también cambia su color. Para resolver este problema, debe redefinir la plantilla del control.
fuente
Establezca el estilo de cada ListViewItem para que Focusable se establezca en falso.
fuente
Aquí está la plantilla predeterminada para ListViewItem de Blend:
Plantilla ListViewItem predeterminada:
Simplemente elimine IsSelected Trigger y IsSelected / IsSelectionActive MultiTrigger, agregando el siguiente código a su Estilo para reemplazar la plantilla predeterminada, y no habrá ningún cambio visual cuando se seleccione.
Solución para desactivar los cambios visuales de la propiedad IsSelected:
fuente
La forma más fácil que encontré:
fuente
ListView.ItemContainerStyle
¡aunque tienes que aplicarlo !Además de la solución anterior ... usaría un MultiTrigger para permitir que los aspectos destacados de MouseOver continúen funcionando después de la selección, de modo que el estilo de ListViewItem sea:
fuente
De acuerdo, un poco tarde para el juego, pero ninguna de estas soluciones hizo lo que estaba tratando de hacer. Estas soluciones tienen un par de problemas.
Quería un ListView con los encabezados de agrupación, y cada ListViewItem debería ser simplemente 'informativo' sin selección ni pasar el cursor, pero el ListViewItem tiene un botón en el que quiero que se pueda hacer clic y que se pueda desplazar.
Entonces, realmente lo que quiero es que ListViewItem no sea un ListViewItem en absoluto, entonces, me sobrepasé el ControlTemplate de ListViewItem y lo convertí en un simple ContentControl.
fuente
Una de las propiedades de la vista de lista es
IsHitTestVisible
. Desmarque.fuente
IsHitTestVisible
la selección, no se puede hacer clic en el botón.IsEnabled = false;
Esto es para otras personas que pueden encontrar los siguientes requisitos:
Si es como yo (usando WPF con .NET 4.5) y descubrió que las soluciones que involucran desencadenadores de estilo simplemente no funcionaron, aquí está mi solución:
Reemplace ControlTemplate de ListViewItem en un estilo:
..Y el DataTemplate:
Resulta en esto en tiempo de ejecución (el elemento 'B' está seleccionado, el elemento 'D' tiene el mouse sobre):
fuente
Utilice el siguiente código:
fuente
El código siguiente deshabilita la selección de filas ListViewItem y también permite agregar relleno, margen, etc.
fuente
Debajo del código, deshabilite el enfoque en ListViewItem
fuente