2010-08-22 5 views
7

Ich habe ein Listenfeld mit einem Datamaplate für die Elemente. Das Problem ist, dass die Auswahl eines Artikels nicht funktioniert, indem Sie einfach irgendwo auf den Artikel klicken; Ich muss auf ein bestimmtes Unterelement klicken, damit es tatsächlich funktioniert.Listbox Datatemplate - Element nur wählbar durch Klicken auf ein Subelement, nicht nur irgendwo auf dem Artikel

Mein Artikel hat ein Bild und einen Textblock. Wenn ich die Maus über das Bild oder den Textblock halte, sehe ich tatsächlich den Hover-Effekt. Wenn ich mit der Maus über einen der "leeren" Bereiche des Objekts gehe, kein Hover-Effekt (und keine Auswahl, wenn ich dort klicke).

Beispiel Bild: http://i33.tinypic.com/wvtleg.png

Wenn ich auf klicken (oder schweben über) den eigentlichen Text oder das Bild, um es funktioniert gut, aber wenn ich meine Maus in die leeren Flächen schweben (I eine rote Linie gezeichnet haben drum herum :)) Die Listbox antwortet nicht.

Wie bekomme ich die Listbox, die schwebt/klickt, um auf irgendwo im Feld des Artikels zu reagieren?

Der Vollständigkeit halber hier ist meine Listbox + Vorlage:

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

Antwort

7

Als Quartermeister darauf hingewiesen - Sie müssen den Hintergrund des Rasters festlegen - aber Sie müssen auch den folgenden Stil in Ihren Ressourcen festlegen, da ListBoxItems 'HorizontalContentAlignment standardmäßig auf Left festgelegt ist. (Es ist nicht genug, es auf der ListBox zu setzen)

+0

Danke, das hat funktioniert. – Pygmy

13

Es klingt wie Ihr ListBoxItem zu hit testing nicht reagiert. Versuchen Sie, den Hintergrund des Rasters auf Transparent Einstellung:

<Grid Background="Transparent"> 

Der Standardwert null ist, die das Element unsichtbar machen Tests zu treffen. Wenn Sie den Hintergrund auf transparent setzen, wirkt sich dies nicht auf die Anzeige aus, sondern ermöglicht es, das Element zu treffen. Der Standardstil für ListBoxItem hat einen transparenten Hintergrund, aber Sie haben ihn möglicherweise neu formatiert.

+0

Dieser hat mir wirklich geholfen. Ich habe lange nach dieser Lösung gesucht ... Ich hatte in meinem Fall ein StackPanel anstelle eines Rasters, und es funktioniert wie angekündigt, also lautet die Quintessenz: Wenn Sie möchten, dass Ihr Container (Panel) Klicks für Ihre ListBox, setze den Hintergrund auf Transparent. – birdypme

Verwandte Themen