2010-08-22 3 views
7

Ho una casella di riepilogo con un datatemplate per gli articoli. Il problema è che la selezione di un oggetto non funziona semplicemente cliccando ovunque sull'elemento; Devo fare clic su un elemento secondario specifico affinché funzioni effettivamente.Datatemplate della casella di riepilogo - elemento selezionabile solo facendo clic su un sottoelemento, non solo da qualsiasi punto sull'articolo

Il mio articolo ha un'immagine e un blocco di testo. Se passo il mouse sopra l'immagine o il blocco di testo, vedo effettivamente l'effetto hover. Se si passa il mouse su uno degli spazi "vuoti" dell'elemento, nessun effetto di passaggio del mouse (e nessuna selezione quando clicco lì).

immagine

Esempio: http://i33.tinypic.com/wvtleg.png

Se scatto sopra (o con il mouse sopra) il testo reale o l'immagine che funziona bene, ma se mi passa il mouse il mouse nelle aree vuote (ho disegnato una linea rossa intorno ad esso :)) la listbox non risponde.

Come ottengo il passaggio del mouse sulla casella di riepilogo/clic per rispondere a fare clic su ovunque nello spazio dell'oggetto??

Per completezza qui è la mia casella di riepilogo + modello:

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

risposta

7

Come indicato da Quartermeister, è necessario impostare lo sfondo della griglia, ma è necessario anche impostare lo stile seguente nelle risorse in quanto "HorizontalContentAlignment di ListBoxItems è impostato su Sinistra per impostazione predefinita. (Non è sufficiente impostarlo sul ListBox)

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

Grazie, ha funzionato. – Pygmy

13

Sembra che il tuo ListBoxItem non risponde alle hit testing. Provare a impostare il fondo della griglia per Transparent:

<Grid Background="Transparent"> 

Il valore predefinito è null, che renderà l'elemento invisibile per colpire il test. Impostare lo sfondo su trasparente non influirà sul display ma consentirà di colpire l'elemento. Lo stile predefinito per ListBoxItem avrà uno sfondo trasparente, ma potrebbe essere stato ridisegnato.

+0

Questo mi ha davvero aiutato. Ho cercato questa soluzione per un po 'di tempo ... Avevo uno StackPanel invece di una Grid nel mio caso, e funziona come pubblicizzato, quindi la linea di fondo è: se vuoi il tuo contenitore (pannello) registrare i clic per il tuo ListBox, imposta lo sfondo su Trasparente. – birdypme