2010-08-22 14 views
7

Tengo un cuadro de lista con un elemento de datos para los elementos. El problema es que la selección de un elemento no funciona simplemente haciendo clic en cualquier parte del elemento; Tengo que hacer clic en un subelemento específico para que realmente funcione.Cuadro de datos de cuadro de lista: elemento que solo se puede seleccionar haciendo clic en un subelemento, no en cualquier lugar del elemento

Mi artículo tiene una imagen y un bloque de texto. Si pasa el mouse sobre la imagen o bloque de texto, realmente veo el efecto de desplazamiento. Si coloco el mouse sobre cualquiera de los espacios 'vacíos' del elemento, no se mostrará el efecto de desplazamiento (y no se seleccionará cuando haga clic allí).

Imagen de ejemplo: http://i33.tinypic.com/wvtleg.png

Si hago clic en (o se ciernen sobre) el texto o la imagen real que trabaja muy bien, pero si ciernen mi ratón en las áreas vacías (He dibujado una línea roja a su alrededor :)) el listbox no responde.

¿Cómo obtengo el cuadro de lista haciendo clic/al hacer clic para responder haciendo clic en cualquier parte en el espacio del elemento?

Para completar aquí es mi cuadro de lista + plantilla:

<ListBox Grid.Row="1" 
    ItemsSource="{Binding Path=CreatableOutputWindows, Mode=OneWay}" Height="Auto" 
    HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
    Margin="8,8,8,8" 
    Name="listBox1" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="84"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <Border Margin="5" BorderBrush="Black" BorderThickness="2"> 
      <Image Source="{Binding Path=Image}" Stretch="Fill" Width="80" Height="50" /> 
     </Border> 
     <StackPanel Grid.Column="1" Margin="5"> 
      <StackPanel Orientation="Horizontal" TextBlock.FontWeight="Bold"> 
      <TextBlock Text="{Binding Path=Name}" /> 
      </StackPanel> 
     </StackPanel> 
     </Grid> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Respuesta

7

Como señaló Quartermeister, debe establecer el Fondo de la cuadrícula, pero también debe establecer el siguiente estilo en sus recursos, ya que HorizontalContentAlignment de ListBoxItems se establece de forma predeterminada en Left. (No es suficiente para configurarlo en el ListBox)

<ListBox.Resources> 
    <Style TargetType="{x:Type ListBoxItem}"> 
     <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
    </Style> 
</ListBox.Resources> 
+0

Gracias, esto funcionó. – Pygmy

13

Parece que su ListBoxItem no está respondiendo a hit testing. Intente configurar el fondo de la cuadrícula para Transparente:

<Grid Background="Transparent"> 

El valor predeterminado es, lo que hará que el elemento invisible para golpear la prueba. Establecer el fondo como transparente no afectará la pantalla, pero permitirá que se golpee el elemento. El estilo predeterminado para ListBoxItem tendrá un fondo transparente, pero puede haberlo rediseñado.

+0

Este realmente me ayudó. He buscado esta solución durante bastante tiempo ... Tenía un StackPanel en lugar de una Grid en mi caso, y funciona según lo anunciado, por lo que la conclusión es: si desea que su contenedor (panel) registre los clics de su ListBox, establece el fondo en transparente. – birdypme

Cuestiones relacionadas