wpf listbox

listboxitem wpf



hacer que los elementos del cuadro de lista en WPF no sean seleccionables (11)

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?


Agregar propiedad enfocable como falsa en el estilo ListBoxItem:

<Style x:Key="{x:Type ListBoxItem}" TargetType="{x:Type ListBoxItem}"> <!-- Possibly other setters --> <Setter Property="Focusable" Value="False" /> </Style>



En mi caso, tuve un 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ó para mí como se esperaba. BR, Daniel


Hay una forma aún más fácil: establecer la propiedad ListBox IsHitTestVisible="False" . Esto evita que todos los elementos de la lista reciban eventos del mouse. Esto tiene la ventaja de detener el resaltado cuando pasas el mouse también.

Funciona para mí en WP 7.1.


Mejor para evitar eventos, es más elegante y sin efectos secundarios la etiqueta de estilo.

<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>


Por favor, use esto dentro de su cuadro de lista. Encontré 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>


Si no desea que se puedan seleccionar, es probable que no desee una vista de lista. Pero si esto es lo que realmente necesitas, puedes 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 gatillo IsSelected. Puede hacer que el borde tenga un color diferente para que no sea "Feo" o establecerlo en transparente y no estará visible cuando se seleccione.

Espero que esto ayude.


También puede hacer un cuadro de lista deshabilitado, lo que le dará un cuadro de lista estático y no interactivo.

<ListBox IsEnabled="False"/>

Creo que esta es la solución lo más simple posible.


Una forma sencilla de hacer esto (utilizando la respuesta de viky anterior) es establecer el índice seleccionado en -1 en el 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; } }


puede manejar el evento SelectionChanged de ListBox y deseleccionar el elemento seleccionado en el controlador de eventos.


Si no necesita selección, use un ItemsControl lugar de un ListBox