Tengo un cuadro de lista en WPF, y cuando seleccionan un elemento, muestra un color feo ¿Puedo hacer que todos los elementos no sean seleccionables?hacer elementos Listbox en WPF no seleccionables
Respuesta
Si usted no necesita la selección, utilice un ItemsControl
en lugar de un ListBox
No siempre es cierto; 'ItemsControl' no puede hacer algunas cosas que' ListBox' puede necesitar, como 'ScrollIntoView' cuando usa la virtualización. –
No necesariamente cierto. Puede haber muchas razones para no querer usar el mecanismo de selección * original * de un ListBox pero aún conserva la funcionalidad: solo para nombrar un ejemplo, considere un ListBox de imágenes donde quiera agregar una casilla adicional en la esquina de cada imagen para habilitar la selección. Va a conectar esta casilla de verificación al mecanismo de selección original de todos modos, todavía desea deshabilitar la selección de clic original de ListBox. –
Si no las quiere seleccionar, entonces probablemente no desee una vista de lista. Pero si esto es lo que realmente necesita, entonces puede hacerlo con un estilo:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<Style x:Key="{x:Type ListBoxItem}" TargetType="{x:Type ListBoxItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<Border
Name="Border"
Padding="2"
SnapsToDevicePixels="true">
<ContentPresenter />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter TargetName="Border" Property="Background" Value="#DDDDDD"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="#888888"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Page.Resources>
<Grid>
<ListBox>
<ListBoxItem>One</ListBoxItem>
<ListBoxItem>Two</ListBoxItem>
<ListBoxItem>Three</ListBoxItem>
</ListBox>
</Grid>
</Page>
Mira el IsSelected Trigger. Puede hacer que el borde tenga un color diferente para que no sea "feo" o establecerlo en transparente y no será visible cuando se seleccione.
Espero que esto ayude.
Agregar **
puede manejar el evento SelectionChanged de ListBox y deseleccionar el elemento seleccionado en el controlador de eventos.
En caso de que alguien todavía quiere funcionalidad no seleccionable ListBoxItem (o ListViewItem). http://thrash505.wordpress.com/2011/01/04/non-selectable-listboxitem-or-listviewitem-using-attached-properties/
Una manera simple de hacer esto (utilizando la respuesta de viky anterior) es establecer el índice seleccionado a -1 en SelectionChanged(), de la siguiente manera.
public void OnListView_SelectionChanged(Object sender, RoutedEventArgs e)
{
if (null != sender && sender is ListView)
{
ListView lv = sender as ListView;
lv.SelectedIndex = -1;
}
}
Hay una manera aún más fácil: juego de ListBox
propiedad IsHitTestVisible="False"
. Esto evita que todos los elementos de la lista reciban eventos del mouse. Esto tiene la ventaja de detener el resaltado al pasar el mouse también.
Funciona para mí en WP 7.1.
pero luego todo el listbox no responde ... barras de desplazamiento incluidas. –
@EladKatz: esto es cierto. Por eso a veces termino agregando mi propio 'ScrollViewer' alrededor del' ListBox' para restablecer el desplazamiento. –
@DeniseDraper es una buena idea, pero mi scrollviewer no se puede "desplazar" cuando la lista está llena ... Sé que el contenido es suficiente para que la barra de desplazamiento funcione, pero simplemente permanece "inactiva" ... ¿algún pensamiento? – StinkyCat
Es mejor evitar los eventos, es más elegante y sin efectos secundarios, la etiqueta Style.
<ListBox>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="IsEnabled" Value="False"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
... what you want as a source ...
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
añadir una propiedad enfocable como falso en estilo ListBoxItem:
<Style x:Key="{x:Type ListBoxItem}" TargetType="{x:Type ListBoxItem}">
<!-- Possibly other setters -->
<Setter Property="Focusable" Value="False" />
</Style>
Esta es la verdadera respuesta. –
También puede hacer ListBox deshabilitado, lo que le dará cuadro de lista estática, no interactivo.
<ListBox IsEnabled="False"/>
Creo que esta es la solución lo más simple posible.
En mi caso había templado ListboxItems con un Textblock y un ComboBox. El único "activo" debería ser el Combo ...
<ScrollViewer VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
CanContentScroll="True" />
<ItemsControl>
....here my content....
</Itemscontrol>
</ScrollViewer>
funcionó bien para mí como era de esperar. BR, Daniel
Por favor, use esto dentro de su listbox. He encontrado esta solución muy elegante
<ListBox ItemsSource="{Binding YourCollection}">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Focusable" Value="False"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
La solución más elegante de hecho – CCamilo
- 1. WPF ListBox transparente con elementos seleccionables
- 2. Elementos seleccionables Elemento de control en WPF
- 3. ¿Eliminar elementos de ListBox en WPF?
- 4. WPF ListBox que establece sus elementos horizontalmente
- 5. Crear WinForms ComboBox con elementos no seleccionables
- 6. Vinculando ItemsSource y IsChecked de un MenuItem para obtener una lista de elementos seleccionables en WPF
- 7. WPF listbox empty datatemplate
- 8. WPF Listbox Wrapping
- 9. Multicolumn ListBox en WPF
- 10. WPF ListBox no se actualiza con ItemsSource
- 11. ¿Cómo hacer datatemplate para los elementos en listbox?
- 12. ListBox no está recibiendo elementos seleccionados
- 13. Evite que WPF ListView o ListBox muestren elementos "medios"
- 14. WPF ListBox OnScroll Evento
- 15. WPF Listbox + Expander events
- 16. WPF ListBox editable
- 17. Haciendo cosas no seleccionables en IE
- 18. elementos largos ListBox indica
- 19. WPF Color de selección ListBox
- 20. Elementos de ListBox Presentes Bottom-to-Top
- 21. ListBox, VirtualizingStackPanel y desplazamiento suave en WPF
- 22. listbox; número de elementos seleccionados
- 23. DataGridView: ¿Cómo hacer que algunas celdas sean no seleccionables?
- 24. WPF vinculante a Listbox selectedItem
- 25. WPF ListBox con ListBox - Virtualización de UI y Desplazamiento
- 26. Columnas no seleccionables en la tabla HTML
- 27. WP7 ListBox Elementos para llenar el ancho de ListBox
- 28. WPF Listbox y Select All
- 29. ObservableCollection obligatorio para WPF ListBox
- 30. WPF listbox item not wordwrapping
posible duplicado de [No hay ListBox.SelectionMode = "None", ¿hay otra manera de desactivar la selección en un cuadro de lista?] (Http://stackoverflow.com/questions/ 1398559/there-is-no-listbox-selectionmode-none-is-there-another-way-to-disable-select) –
¿me estás tomando el pelo? Esta pregunta es de 2009 y me está diciendo ahora, después de 6 años que está duplicado? Ok –
Nunca es demasiado tarde para ordenar cosas –