2011-01-16 4 views
21

quando creo ListBox con gli elementi orizzontali ordinare per esempio come questo:gap tra oggetti nel mio ListBox

<DockPanel> 
    <ListBox> 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <VirtualizingStackPanel Orientation="Horizontal" /> 
      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 
     <ListBoxItem> 
      <Button Content="Hello" /> 
     </ListBoxItem> 
     <ListBoxItem> 
      <Button Content="Hello" /> 
     </ListBoxItem> 
    </ListBox> 
</DockPanel> 

ho piccoli spazi tra i tasti nella lista come indicato dalle frecce sulla seguente immagine:

Picture showing gaps

Come posso eliminare queste lacune per favore? Devo avere gli articoli nello ListBox uno accanto all'altro. Ho provato a cambiare ItemTemplate del ListBox ma non è stato d'aiuto.

+0

Quando uso il 'ListBox' con tradizionale orientamento verticale articoli sono solo uno accanto all'altro come previsto e come volevano ... :( – drasto

risposta

33

Ciò è dovuto al riempimento all'interno dell'oggetto ItemContainerStyle predefinito per ListBoxItem. Per rimuovere questo puoi sovrascrivere ItemContainerStyle. Ad esempio, prova il seguente ItemContainerStyle vuoto nel tuo ListBox e puoi vedere che il margine non esiste più.

<ListBox > 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate > 
       <VirtualizingStackPanel IsItemsHost="True" Orientation="Horizontal"/> 
      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 
     <ListBox.ItemContainerStyle> 
      <Style TargetType="{x:Type ListBoxItem}"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
          <ContentPresenter/> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </ListBox.ItemContainerStyle> 
     <Button Content="hello1" Width="75"/> 
     <Button Content="Hello2" Width="75"/> 
    </ListBox> 
+0

Grande, ottimo, ottimo! Funziona come un fascino! Mi ha risparmiato un sacco di tempo :) Grazie – drasto

+0

Interrompe la gestione della selezione per ListBox. – bugged87

+1

Questo fa il lavoro di rimozione dello spazio tra gli elementi ma rimuove completamente la funzionalità di selezione. Invece di toccare ContentPresenter come nella risposta accettata sopra, ho risolto il problema impostando Padding e Margine entrambi su 0. Inoltre, ho notato che l'impostazione di uno solo come suggerito da Somene in basso non avrebbe funzionato. Quindi, invece di modificare la proprietà Template sopra, ho appena fatto ; . Quello spazio rimosso tra gli oggetti e la mia selezione funziona ancora. – pixel

19

Quelle lacune sono all'interno della ControlTemplate del ListViewItems, che avrebbe dovuto ignorare che ho paura ...

Edit: Su alcune piattaforme che non hanno nemmeno bisogno di pasticciare con il Template per sbarazzarsi degli spazi tra gli elementi:

<ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="Padding" Value="0"/> 
     </Style> 
    </ListBox.ItemContainerStyle> 

per sbarazzarsi del divario sul lato molto è effettivamente necessario per cambiare il ListBox ControlTemplate in sé, non è una questione di voci. Nel modello Aero predefinito c'è un bordo con Padding = 1

+0

Potete fornire il campione di codice rapido? Le stesse lacune ci sono anche quando Io uso alcuni altri controlli come elementi di 'ListBox' ... – drasto

+0

Mescolato, è nel ListViewItem, modificato, andando a vedere se posso darti il ​​metodo per sbarazzartene Modifica: Bene, l'altra risposta è completo, quindi non necessario per questo ... –

+0

Questo non funziona – pixel