2011-01-16 9 views
21

cuando creo ListBox con elementos horizontales de ordenar, por ejemplo, así:Los espacios entre artículos en mi cuadro de lista

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

tengo pequeños espacios entre los botones en la lista, como se indica por las flechas en la siguiente imagen:

Picture showing gaps

¿Cómo puedo deshacerme de esas lagunas, por favor? Necesito tener artículos en ListBox uno al lado del otro. He intentado cambiar ItemTemplate del ListBox pero no sirvió.

+0

Cuando utilizo el 'ListBox' con orientación vertical tradicional de artículos que son simplemente uno junto al otro como se esperaba y como querían ... :( – drasto

Respuesta

33

Esto se debe al relleno dentro del ItemContainerStyle predeterminado para ListBoxItem. Para eliminar esto, puede anular ItemContainerStyle. Por ejemplo, pruebe el Empty ItemContainerStyle a continuación en su ListBox y verá que el margen ya no existe.

<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

¡Genial, genial, genial! ¡Funciona de maravilla! Me ahorró mucho tiempo :) Gracias – drasto

+0

Rompe el manejo de la selección para ListBox. – bugged87

+1

Esto hace el trabajo de eliminar elementos btw de espacio, pero elimina por completo la funcionalidad de selección. En lugar de tocar ContentPresenter como en la respuesta aceptada arriba, resolví mi problema estableciendo Padding and Margin en 0. Además, noté que establecer solo uno como algunos de los sugeridos a continuación no funcionaría. Entonces, en lugar de cambiar la propiedad de Plantilla anterior, acabo de hacer ; . Eso eliminó el espacio por puntos y mi selección aún funciona. – pixel

19

Esos vacíos son en el interior del ControlTemplate del ListViewItems, que tendría que anular que tengo miedo ...

Editar: En algunas plataformas que ni siquiera tienen que meterse con el Template a deshacerse de los huecos entre los elementos:

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

para deshacerse de la brecha en el mismo lado que realmente se necesita para cambiar el propio cuadro de lista ControlTemplate, no es una cuestión de los artículos. En la plantilla de Aero predeterminada hay un borde con Padding = 1

+0

¿Puede dar ejemplo de código rápida? Las mismas lagunas están ahí, incluso cuando Uso algunos otros controles como elementos de 'ListBox' ... – drasto

+0

Lo mezclé, está en ListViewItem, lo edité, voy a ver si puedo darle un método para deshacerse de ellos. Editar: Bueno, la otra respuesta es lo suficientemente completo como para no necesitarlo ... –

+0

Esto no funciona – pixel

Cuestiones relacionadas